initial checkin according to parallel IP
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..2c775e9
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,43 @@
+**/bin/
+**/target/
+**/*._trace
+**/WebContent/
+**/build/
+**/error-screenshots/
+**/reference-screenshots/
+**.DS_Store
+**git.properties
+
+**/target/
+**/.metadata/
+
+**/emf-gen/**/.gitignore
+**/src-gen/**/.gitignore
+**/git.properties
+**/*.java._trace
+**/*.log
+**/*.log.properties
+
+**/bin/
+**/build/
+*.class
+*.ctrl
+**/Debug/
+.DS_Store
+*.ear
+*.war
+
+**/*.actionbin
+**/*.blipbin
+**/*.chartbin
+**/*.cubebin
+**/*.datatypebin
+**/*.dtobin
+**/*.entitybin
+**/*.servicebin
+**/*.tablebin
+**/*.uibin
+**/*.uisemanticbin
+**/*.xtendbin
+**/*.xtextbin
+
diff --git a/.project b/.project
new file mode 100644
index 0000000..c01d1f9
--- /dev/null
+++ b/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.osbp.fork.jpos.aggregator</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+</projectDescription>
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/epl-v20.html b/epl-v20.html
new file mode 100644
index 0000000..637a181
--- /dev/null
+++ b/epl-v20.html
@@ -0,0 +1,300 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>Eclipse Public License - Version 2.0</title>
+    <style type="text/css">
+      body {
+        margin: 1.5em 3em;
+      }
+      h1{
+        font-size:1.5em;
+      }
+      h2{
+        font-size:1em;
+        margin-bottom:0.5em;
+        margin-top:1em;
+      }
+      p {
+        margin-top:  0.5em;
+        margin-bottom: 0.5em;
+      }
+      ul, ol{
+        list-style-type:none;
+      }
+    </style>
+  </head>
+  <body>
+    <h1>Eclipse Public License - v 2.0</h1>
+    <p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+      PUBLIC LICENSE (&ldquo;AGREEMENT&rdquo;). ANY USE, REPRODUCTION OR DISTRIBUTION
+      OF THE PROGRAM CONSTITUTES RECIPIENT&#039;S ACCEPTANCE OF THIS AGREEMENT.
+    </p>
+    <h2 id="definitions">1. DEFINITIONS</h2>
+    <p>&ldquo;Contribution&rdquo; means:</p>
+    <ul>
+      <li>a) in the case of the initial Contributor, the initial content
+        Distributed under this Agreement, and
+      </li>
+      <li>
+        b) in the case of each subsequent Contributor:
+        <ul>
+          <li>i) changes to the Program, and</li>
+          <li>ii) additions to the Program;</li>
+        </ul>
+        where such changes and/or additions to the Program originate from
+        and are Distributed by that particular Contributor. A Contribution
+        &ldquo;originates&rdquo; from a Contributor if it was added to the Program by such
+        Contributor itself or anyone acting on such Contributor&#039;s behalf.
+        Contributions do not include changes or additions to the Program that
+        are not Modified Works.
+      </li>
+    </ul>
+    <p>&ldquo;Contributor&rdquo; means any person or entity that Distributes the Program.</p>
+    <p>&ldquo;Licensed Patents&rdquo; mean patent claims licensable by a Contributor which
+      are necessarily infringed by the use or sale of its Contribution alone
+      or when combined with the Program.
+    </p>
+    <p>&ldquo;Program&rdquo; means the Contributions Distributed in accordance with this
+      Agreement.
+    </p>
+    <p>&ldquo;Recipient&rdquo; means anyone who receives the Program under this Agreement
+      or any Secondary License (as applicable), including Contributors.
+    </p>
+    <p>&ldquo;Derivative Works&rdquo; shall mean any work, whether in Source Code or other
+      form, that is based on (or derived from) the Program and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship.
+    </p>
+    <p>&ldquo;Modified Works&rdquo; shall mean any work in Source Code or other form that
+      results from an addition to, deletion from, or modification of the
+      contents of the Program, including, for purposes of clarity any new file
+      in Source Code form that contains any contents of the Program. Modified
+      Works shall not include works that contain only declarations, interfaces,
+      types, classes, structures, or files of the Program solely in each case
+      in order to link to, bind by name, or subclass the Program or Modified
+      Works thereof.
+    </p>
+    <p>&ldquo;Distribute&rdquo; means the acts of a) distributing or b) making available
+      in any manner that enables the transfer of a copy.
+    </p>
+    <p>&ldquo;Source Code&rdquo; means the form of a Program preferred for making
+      modifications, including but not limited to software source code,
+      documentation source, and configuration files.
+    </p>
+    <p>&ldquo;Secondary License&rdquo; means either the GNU General Public License,
+      Version 2.0, or any later versions of that license, including any
+      exceptions or additional permissions as identified by the initial
+      Contributor.
+    </p>
+    <h2 id="grant-of-rights">2. GRANT OF RIGHTS</h2>
+    <ul>
+      <li>a) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free copyright
+        license to reproduce, prepare Derivative Works of, publicly display,
+        publicly perform, Distribute and sublicense the Contribution of such
+        Contributor, if any, and such Derivative Works.
+      </li>
+      <li>b) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free patent
+        license under Licensed Patents to make, use, sell, offer to sell,
+        import and otherwise transfer the Contribution of such Contributor,
+        if any, in Source Code or other form. This patent license shall
+        apply to the combination of the Contribution and the Program if,
+        at the time the Contribution is added by the Contributor, such
+        addition of the Contribution causes such combination to be covered
+        by the Licensed Patents. The patent license shall not apply to any
+        other combinations which include the Contribution. No hardware per
+        se is licensed hereunder.
+      </li>
+      <li>c) Recipient understands that although each Contributor grants the
+        licenses to its Contributions set forth herein, no assurances are
+        provided by any Contributor that the Program does not infringe the
+        patent or other intellectual property rights of any other entity.
+        Each Contributor disclaims any liability to Recipient for claims
+        brought by any other entity based on infringement of intellectual
+        property rights or otherwise. As a condition to exercising the rights
+        and licenses granted hereunder, each Recipient hereby assumes sole
+        responsibility to secure any other intellectual property rights needed,
+        if any. For example, if a third party patent license is required to
+        allow Recipient to Distribute the Program, it is Recipient&#039;s
+        responsibility to acquire that license before distributing the Program.
+      </li>
+      <li>d) Each Contributor represents that to its knowledge it has sufficient
+        copyright rights in its Contribution, if any, to grant the copyright
+        license set forth in this Agreement.
+      </li>
+      <li>e) Notwithstanding the terms of any Secondary License, no Contributor
+        makes additional grants to any Recipient (other than those set forth
+        in this Agreement) as a result of such Recipient&#039;s receipt of the
+        Program under the terms of a Secondary License (if permitted under
+        the terms of Section 3).
+      </li>
+    </ul>
+    <h2 id="requirements">3. REQUIREMENTS</h2>
+    <p>3.1 If a Contributor Distributes the Program in any form, then:</p>
+    <ul>
+      <li>a) the Program must also be made available as Source Code, in
+        accordance with section 3.2, and the Contributor must accompany
+        the Program with a statement that the Source Code for the Program
+        is available under this Agreement, and informs Recipients how to
+        obtain it in a reasonable manner on or through a medium customarily
+        used for software exchange; and
+      </li>
+      <li>
+        b) the Contributor may Distribute the Program under a license
+        different than this Agreement, provided that such license:
+        <ul>
+          <li>i) effectively disclaims on behalf of all other Contributors all
+            warranties and conditions, express and implied, including warranties
+            or conditions of title and non-infringement, and implied warranties
+            or conditions of merchantability and fitness for a particular purpose;
+          </li>
+          <li>ii) effectively excludes on behalf of all other Contributors all
+            liability for damages, including direct, indirect, special, incidental
+            and consequential damages, such as lost profits;
+          </li>
+          <li>iii) does not attempt to limit or alter the recipients&#039; rights in the
+            Source Code under section 3.2; and
+          </li>
+          <li>iv) requires any subsequent distribution of the Program by any party
+            to be under a license that satisfies the requirements of this section 3.
+          </li>
+        </ul>
+      </li>
+    </ul>
+    <p>3.2 When the Program is Distributed as Source Code:</p>
+    <ul>
+      <li>a) it must be made available under this Agreement, or if the Program (i)
+        is combined with other material in a separate file or files made available
+        under a Secondary License, and (ii) the initial Contributor attached to
+        the Source Code the notice described in Exhibit A of this Agreement,
+        then the Program may be made available under the terms of such
+        Secondary Licenses, and
+      </li>
+      <li>b) a copy of this Agreement must be included with each copy of the Program.</li>
+    </ul>
+    <p>3.3 Contributors may not remove or alter any copyright, patent, trademark,
+      attribution notices, disclaimers of warranty, or limitations of liability
+      (&lsquo;notices&rsquo;) contained within the Program from any copy of the Program which
+      they Distribute, provided that Contributors may add their own appropriate
+      notices.
+    </p>
+    <h2 id="commercial-distribution">4. COMMERCIAL DISTRIBUTION</h2>
+    <p>Commercial distributors of software may accept certain responsibilities
+      with respect to end users, business partners and the like. While this
+      license is intended to facilitate the commercial use of the Program, the
+      Contributor who includes the Program in a commercial product offering should
+      do so in a manner which does not create potential liability for other
+      Contributors. Therefore, if a Contributor includes the Program in a
+      commercial product offering, such Contributor (&ldquo;Commercial Contributor&rdquo;)
+      hereby agrees to defend and indemnify every other Contributor
+      (&ldquo;Indemnified Contributor&rdquo;) against any losses, damages and costs
+      (collectively &ldquo;Losses&rdquo;) arising from claims, lawsuits and other legal actions
+      brought by a third party against the Indemnified Contributor to the extent
+      caused by the acts or omissions of such Commercial Contributor in connection
+      with its distribution of the Program in a commercial product offering.
+      The obligations in this section do not apply to any claims or Losses relating
+      to any actual or alleged intellectual property infringement. In order to
+      qualify, an Indemnified Contributor must: a) promptly notify the
+      Commercial Contributor in writing of such claim, and b) allow the Commercial
+      Contributor to control, and cooperate with the Commercial Contributor in,
+      the defense and any related settlement negotiations. The Indemnified
+      Contributor may participate in any such claim at its own expense.
+    </p>
+    <p>For example, a Contributor might include the Program
+      in a commercial product offering, Product X. That Contributor is then a
+      Commercial Contributor. If that Commercial Contributor then makes performance
+      claims, or offers warranties related to Product X, those performance claims
+      and warranties are such Commercial Contributor&#039;s responsibility alone.
+      Under this section, the Commercial Contributor would have to defend claims
+      against the other Contributors related to those performance claims and
+      warranties, and if a court requires any other Contributor to pay any damages
+      as a result, the Commercial Contributor must pay those damages.
+    </p>
+    <h2 id="warranty">5. NO WARRANTY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN &ldquo;AS IS&rdquo; BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+      WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+      MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
+      solely responsible for determining the appropriateness of using and
+      distributing the Program and assumes all risks associated with its
+      exercise of rights under this Agreement, including but not limited to the
+      risks and costs of program errors, compliance with applicable laws, damage
+      to or loss of data, programs or equipment, and unavailability or
+      interruption of operations.
+    </p>
+    <h2 id="disclaimer">6. DISCLAIMER OF LIABILITY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY
+      LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+      OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+      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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+      GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+    </p>
+    <h2 id="general">7. GENERAL</h2>
+    <p>If any provision of this Agreement is invalid or unenforceable under
+      applicable law, it shall not affect the validity or enforceability of the
+      remainder of the terms of this Agreement, and without further action by the
+      parties hereto, such provision shall be reformed to the minimum extent
+      necessary to make such provision valid and enforceable.
+    </p>
+    <p>If Recipient institutes patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+      (excluding combinations of the Program with other software or hardware)
+      infringes such Recipient&#039;s patent(s), then such Recipient&#039;s rights granted
+      under Section 2(b) shall terminate as of the date such litigation is filed.
+    </p>
+    <p>All Recipient&#039;s rights under this Agreement shall terminate if it fails to
+      comply with any of the material terms or conditions of this Agreement and
+      does not cure such failure in a reasonable period of time after becoming
+      aware of such noncompliance. If all Recipient&#039;s rights under this Agreement
+      terminate, Recipient agrees to cease use and distribution of the Program
+      as soon as reasonably practicable. However, Recipient&#039;s obligations under
+      this Agreement and any licenses granted by Recipient relating to the
+      Program shall continue and survive.
+    </p>
+    <p>Everyone is permitted to copy and distribute copies of this Agreement,
+      but in order to avoid inconsistency the Agreement is copyrighted and may
+      only be modified in the following manner. The Agreement Steward reserves
+      the right to publish new versions (including revisions) of this Agreement
+      from time to time. No one other than the Agreement Steward has the right
+      to modify this Agreement. The Eclipse Foundation is the initial Agreement
+      Steward. The Eclipse Foundation may assign the responsibility to serve as
+      the Agreement Steward to a suitable separate entity. Each new version of
+      the Agreement will be given a distinguishing version number. The Program
+      (including Contributions) may always be Distributed subject to the version
+      of the Agreement under which it was received. In addition, after a new
+      version of the Agreement is published, Contributor may elect to Distribute
+      the Program (including its Contributions) under the new version.
+    </p>
+    <p>Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+      receives no rights or licenses to the intellectual property of any
+      Contributor under this Agreement, whether expressly, by implication,
+      estoppel or otherwise. All rights in the Program not expressly granted
+      under this Agreement are reserved. Nothing in this Agreement is intended
+      to be enforceable by any entity that is not a Contributor or Recipient.
+      No third-party beneficiary rights are created under this Agreement.
+    </p>
+    <h2 id="exhibit-a">Exhibit A &ndash; Form of Secondary Licenses Notice</h2>
+    <p>&ldquo;This Source Code may also be made available under the following 
+    	Secondary Licenses when the conditions for such availability set forth 
+    	in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+    	version(s), and exceptions or additional permissions here}.&rdquo;
+    </p>
+    <blockquote>
+      <p>Simply including a copy of this Agreement, including this Exhibit A
+        is not sufficient to license the Source Code under Secondary Licenses.
+      </p>
+      <p>If it is not possible or desirable to put the notice in a particular file,
+        then You may include the notice in a location (such as a LICENSE file in a
+        relevant directory) where a recipient would be likely to look for
+        such a notice.
+      </p>
+      <p>You may add additional accurate notices of copyright ownership.</p>
+    </blockquote>
+  </body>
+</html>
\ No newline at end of file
diff --git a/jenkins.build.config.xml b/jenkins.build.config.xml
new file mode 100644
index 0000000..ff4d016
--- /dev/null
+++ b/jenkins.build.config.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--#======================================================================= -->
+<!--# Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)     					 			 -->
+<!--# 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:                                                          -->
+<!--# Loetz GmbH&Co.KG - initial API and implementation                      -->
+<!--#======================================================================= -->
+<!--# Module specific parameters for the Jenkins Job 						 -->
+<!--#======================================================================= -->
+<jenkins>
+	<jenkins.build.technologystack />
+	<!-- DO NOT EDIT BELOW THIS LINE -->
+        <jenkins.build.dependencies>
+                <jenkins.build.dependency>org.eclipse.osbp.releng.maven</jenkins.build.dependency>
+        </jenkins.build.dependencies>
+</jenkins>
diff --git a/mavenizing_started b/mavenizing_started
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/mavenizing_started
diff --git a/notice.html b/notice.html
new file mode 100644
index 0000000..81fca9d
--- /dev/null
+++ b/notice.html
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+	<h2>Eclipse Foundation Software User Agreement</h2>
+	<p>November 22, 2014</p>
+
+	<h3>Usage Of Content</h3>
+
+	<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION,
+		INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+		(COLLECTIVELY &quot;CONTENT&quot;). USE OF THE CONTENT IS GOVERNED BY
+		THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+		CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED
+		BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS
+		GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY
+		APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED
+		BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS
+		AGREEMENT AND THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE
+		AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT
+		USE THE CONTENT.</p>
+
+	<h3>Applicable Licenses</h3>
+
+	<p>
+		Unless otherwise indicated, all Content made available by the Eclipse
+		Foundation is provided to you under the terms and conditions of the
+		Eclipse Public License Version 2.0 (&quot;EPL&quot;). A copy of the
+		EPL is provided with this Content and is also available at <a
+			href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
+		For purposes of the EPL, &quot;Program&quot; will mean the Content.
+	</p>
+
+	<p>Content includes, but is not limited to, source code, object
+		code, documentation and other files maintained in the Eclipse
+		Foundation source code repository (&quot;Repository&quot;) in software
+		modules (&quot;Modules&quot;) and made available as downloadable
+		archives (&quot;Downloads&quot;).</p>
+
+	<ul>
+		<li>Content may be structured and packaged into modules to
+			facilitate delivering, extending, and upgrading the Content. Typical
+			modules may include plug-ins (&quot;Plug-ins&quot;), plug-in
+			fragments (&quot;Fragments&quot;), and features
+			(&quot;Features&quot;).</li>
+		<li>Each Plug-in or Fragment may be packaged as a sub-directory
+			or JAR (Java&trade; ARchive) in a directory named
+			&quot;plugins&quot;.</li>
+		<li>A Feature is a bundle of one or more Plug-ins and/or
+			Fragments and associated material. Each Feature may be packaged as a
+			sub-directory in a directory named &quot;features&quot;. Within a
+			Feature, files named &quot;feature.xml&quot; may contain a list of
+			the names and version numbers of the Plug-ins and/or Fragments
+			associated with that Feature.</li>
+		<li>Features may also include other Features (&quot;Included
+			Features&quot;). Within a Feature, files named
+			&quot;feature.xml&quot; may contain a list of the names and version
+			numbers of Included Features.</li>
+	</ul>
+
+	<p>The terms and conditions governing Plug-ins and Fragments should
+		be contained in files named &quot;about.html&quot;
+		(&quot;Abouts&quot;). The terms and conditions governing Features and
+		Included Features should be contained in files named
+		&quot;license.html&quot; (&quot;Feature Licenses&quot;). Abouts and
+		Feature Licenses may be located in any directory of a Download or
+		Module including, but not limited to the following locations:</p>
+
+	<ul>
+		<li>The top-level (root) directory</li>
+		<li>Plug-in and Fragment directories</li>
+		<li>Inside Plug-ins and Fragments packaged as JARs</li>
+		<li>Sub-directories of the directory named &quot;src&quot; of
+			certain Plug-ins</li>
+		<li>Feature directories</li>
+	</ul>
+
+	<p>Note: if a Feature made available by the Eclipse Foundation is
+		installed using the Provisioning Technology (as defined below), you
+		must agree to a license (&quot;Feature Update License&quot;) during
+		the installation process. If the Feature contains Included Features,
+		the Feature Update License should either provide you with the terms
+		and conditions governing the Included Features or inform you where you
+		can locate them. Feature Update Licenses may be found in the
+		&quot;license&quot; property of files named
+		&quot;feature.properties&quot; found within a Feature. Such Abouts,
+		Feature Licenses, and Feature Update Licenses contain the terms and
+		conditions (or references to such terms and conditions) that govern
+		your use of the associated Content in that directory.</p>
+
+	<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY
+		REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND
+		CONDITIONS. SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT
+		ARE NOT LIMITED TO):</p>
+
+	<ul>
+		<li>Eclipse Public License Version 1.0 (available at <a
+			href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>)
+		</li>
+		<li>Eclipse Distribution License Version 1.0 (available at <a
+			href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)
+		</li>
+		<li>Common Public License Version 1.0 (available at <a
+			href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)
+		</li>
+		<li>Apache Software License 1.1 (available at <a
+			href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)
+		</li>
+		<li>Apache Software License 2.0 (available at <a
+			href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)
+		</li>
+		<li>Mozilla Public License Version 1.1 (available at <a
+			href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)
+		</li>
+	</ul>
+
+	<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND
+		CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License,
+		or Feature Update License is provided, please contact the Eclipse
+		Foundation to determine what terms and conditions govern that
+		particular Content.</p>
+
+
+	<h3>Use of Provisioning Technology</h3>
+
+	<p>
+		The Eclipse Foundation makes available provisioning software, examples
+		of which include, but are not limited to, p2 and the Eclipse Update
+		Manager (&quot;Provisioning Technology&quot;) for the purpose of
+		allowing users to install software, documentation, information and/or
+		other materials (collectively &quot;Installable Software&quot;). This
+		capability is provided with the intent of allowing such users to
+		install, extend and update Eclipse-based products. Information about
+		packaging Installable Software is available at <a
+			href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+		(&quot;Specification&quot;).
+	</p>
+
+	<p>You may use Provisioning Technology to allow other parties to
+		install Installable Software. You shall be responsible for enabling
+		the applicable license agreements relating to the Installable Software
+		to be presented to, and accepted by, the users of the Provisioning
+		Technology in accordance with the Specification. By using Provisioning
+		Technology in such a manner and making it available in accordance with
+		the Specification, you further acknowledge your agreement to, and the
+		acquisition of all necessary rights to permit the following:</p>
+
+	<ol>
+		<li>A series of actions may occur (&quot;Provisioning
+			Process&quot;) in which a user may execute the Provisioning
+			Technology on a machine (&quot;Target Machine&quot;) with the intent
+			of installing, extending or updating the functionality of an
+			Eclipse-based product.</li>
+		<li>During the Provisioning Process, the Provisioning Technology
+			may cause third party Installable Software or a portion thereof to be
+			accessed and copied to the Target Machine.</li>
+		<li>Pursuant to the Specification, you will provide to the user
+			the terms and conditions that govern the use of the Installable
+			Software (&quot;Installable Software Agreement&quot;) and such
+			Installable Software Agreement shall be accessed from the Target
+			Machine in accordance with the Specification. Such Installable
+			Software Agreement must inform the user of the terms and conditions
+			that govern the Installable Software and must solicit acceptance by
+			the end user in the manner prescribed in such Installable Software
+			Agreement. Upon such indication of agreement by the user, the
+			provisioning Technology will complete installation of the Installable
+			Software.</li>
+	</ol>
+
+	<h3>Cryptography</h3>
+
+	<p>Content may contain encryption software. The country in which
+		you are currently may have restrictions on the import, possession, and
+		use, and/or re-export to another country, of encryption software.
+		BEFORE using any encryption software, please check the country's laws,
+		regulations and policies concerning the import, possession, or use,
+		and re-export of encryption software, to see if this is permitted.</p>
+
+	<p>
+		<small>Java and all Java-based trademarks are trademarks of
+			Oracle Corporation in the United States, other countries, or both.</small>
+	</p>
+</body>
+</html>
diff --git a/org.eclipse.osbp.fork.jpos.feature/.gitignore b/org.eclipse.osbp.fork.jpos.feature/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos.feature/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/org.eclipse.osbp.fork.jpos.feature/.project b/org.eclipse.osbp.fork.jpos.feature/.project
new file mode 100644
index 0000000..54d6dcb
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos.feature/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.osbp.fork.jpos.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.osbp.fork.jpos.feature/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.fork.jpos.feature/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos.feature/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.fork.jpos.feature/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.fork.jpos.feature/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos.feature/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.fork.jpos.feature/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.fork.jpos.feature/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..0933f8c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos.feature/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.fork.jpos.feature/LICENSE.txt b/org.eclipse.osbp.fork.jpos.feature/LICENSE.txt
new file mode 100644
index 0000000..e23ece2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos.feature/LICENSE.txt
@@ -0,0 +1,277 @@
+Eclipse Public License - v 2.0
+
+    THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+    PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
+    OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+  a) in the case of the initial Contributor, the initial content
+     Distributed under this Agreement, and
+
+  b) in the case of each subsequent Contributor:
+     i) changes to the Program, and
+     ii) additions to the Program;
+  where such changes and/or additions to the Program originate from
+  and are Distributed by that particular Contributor. A Contribution
+  "originates" from a Contributor if it was added to the Program by
+  such Contributor itself or anyone acting on such Contributor's behalf.
+  Contributions do not include changes or additions to the Program that
+  are not Modified Works.
+
+"Contributor" means any person or entity that Distributes the Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which
+are necessarily infringed by the use or sale of its Contribution alone
+or when combined with the Program.
+
+"Program" means the Contributions Distributed in accordance with this
+Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement
+or any Secondary License (as applicable), including Contributors.
+
+"Derivative Works" shall mean any work, whether in Source Code or other
+form, that is based on (or derived from) the Program and for which the
+editorial revisions, annotations, elaborations, or other modifications
+represent, as a whole, an original work of authorship.
+
+"Modified Works" shall mean any work in Source Code or other form that
+results from an addition to, deletion from, or modification of the
+contents of the Program, including, for purposes of clarity any new file
+in Source Code form that contains any contents of the Program. Modified
+Works shall not include works that contain only declarations,
+interfaces, types, classes, structures, or files of the Program solely
+in each case in order to link to, bind by name, or subclass the Program
+or Modified Works thereof.
+
+"Distribute" means the acts of a) distributing or b) making available
+in any manner that enables the transfer of a copy.
+
+"Source Code" means the form of a Program preferred for making
+modifications, including but not limited to software source code,
+documentation source, and configuration files.
+
+"Secondary License" means either the GNU General Public License,
+Version 2.0, or any later versions of that license, including any
+exceptions or additional permissions as identified by the initial
+Contributor.
+
+2. GRANT OF RIGHTS
+
+  a) Subject to the terms of this Agreement, each Contributor hereby
+  grants Recipient a non-exclusive, worldwide, royalty-free copyright
+  license to reproduce, prepare Derivative Works of, publicly display,
+  publicly perform, Distribute and sublicense the Contribution of such
+  Contributor, if any, and such Derivative Works.
+
+  b) Subject to the terms of this Agreement, each Contributor hereby
+  grants Recipient a non-exclusive, worldwide, royalty-free patent
+  license under Licensed Patents to make, use, sell, offer to sell,
+  import and otherwise transfer the Contribution of such Contributor,
+  if any, in Source Code or other form. This patent license shall
+  apply to the combination of the Contribution and the Program if, at
+  the time the Contribution is added by the Contributor, such addition
+  of the Contribution causes such combination to be covered by the
+  Licensed Patents. The patent license shall not apply to any other
+  combinations which include the Contribution. No hardware per se is
+  licensed hereunder.
+
+  c) Recipient understands that although each Contributor grants the
+  licenses to its Contributions set forth herein, no assurances are
+  provided by any Contributor that the Program does not infringe the
+  patent or other intellectual property rights of any other entity.
+  Each Contributor disclaims any liability to Recipient for claims
+  brought by any other entity based on infringement of intellectual
+  property rights or otherwise. As a condition to exercising the
+  rights and licenses granted hereunder, each Recipient hereby
+  assumes sole responsibility to secure any other intellectual
+  property rights needed, if any. For example, if a third party
+  patent license is required to allow Recipient to Distribute the
+  Program, it is Recipient's responsibility to acquire that license
+  before distributing the Program.
+
+  d) Each Contributor represents that to its knowledge it has
+  sufficient copyright rights in its Contribution, if any, to grant
+  the copyright license set forth in this Agreement.
+
+  e) Notwithstanding the terms of any Secondary License, no
+  Contributor makes additional grants to any Recipient (other than
+  those set forth in this Agreement) as a result of such Recipient's
+  receipt of the Program under the terms of a Secondary License
+  (if permitted under the terms of Section 3).
+
+3. REQUIREMENTS
+
+3.1 If a Contributor Distributes the Program in any form, then:
+
+  a) the Program must also be made available as Source Code, in
+  accordance with section 3.2, and the Contributor must accompany
+  the Program with a statement that the Source Code for the Program
+  is available under this Agreement, and informs Recipients how to
+  obtain it in a reasonable manner on or through a medium customarily
+  used for software exchange; and
+
+  b) the Contributor may Distribute the Program under a license
+  different than this Agreement, provided that such license:
+     i) effectively disclaims on behalf of all other Contributors all
+     warranties and conditions, express and implied, including
+     warranties or conditions of title and non-infringement, and
+     implied warranties or conditions of merchantability and fitness
+     for a particular purpose;
+
+     ii) effectively excludes on behalf of all other Contributors all
+     liability for damages, including direct, indirect, special,
+     incidental and consequential damages, such as lost profits;
+
+     iii) does not attempt to limit or alter the recipients' rights
+     in the Source Code under section 3.2; and
+
+     iv) requires any subsequent distribution of the Program by any
+     party to be under a license that satisfies the requirements
+     of this section 3.
+
+3.2 When the Program is Distributed as Source Code:
+
+  a) it must be made available under this Agreement, or if the
+  Program (i) is combined with other material in a separate file or
+  files made available under a Secondary License, and (ii) the initial
+  Contributor attached to the Source Code the notice described in
+  Exhibit A of this Agreement, then the Program may be made available
+  under the terms of such Secondary Licenses, and
+
+  b) a copy of this Agreement must be included with each copy of
+  the Program.
+
+3.3 Contributors may not remove or alter any copyright, patent,
+trademark, attribution notices, disclaimers of warranty, or limitations
+of liability ("notices") contained within the Program from any copy of
+the Program which they Distribute, provided that Contributors may add
+their own appropriate notices.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities
+with respect to end users, business partners and the like. While this
+license is intended to facilitate the commercial use of the Program,
+the Contributor who includes the Program in a commercial product
+offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes
+the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every
+other Contributor ("Indemnified Contributor") against any losses,
+damages and costs (collectively "Losses") arising from claims, lawsuits
+and other legal actions brought by a third party against the Indemnified
+Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program
+in a commercial product offering. The obligations in this section do not
+apply to any claims or Losses relating to any actual or alleged
+intellectual property infringement. In order to qualify, an Indemnified
+Contributor must: a) promptly notify the Commercial Contributor in
+writing of such claim, and b) allow the Commercial Contributor to control,
+and cooperate with the Commercial Contributor in, the defense and any
+related settlement negotiations. The Indemnified Contributor may
+participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those performance
+claims and warranties, and if a court requires any other Contributor to
+pay any damages as a result, the Commercial Contributor must pay
+those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
+BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
+TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
+PURPOSE. Each Recipient is solely responsible for determining the
+appropriateness of using and distributing the Program and assumes all
+risks associated with its exercise of rights under this Agreement,
+including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs
+or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
+SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE
+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further
+action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other software
+or hardware) infringes such Recipient's patent(s), then such Recipient's
+rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of
+time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use
+and distribution of the Program as soon as reasonably practicable.
+However, Recipient's obligations under this Agreement and any licenses
+granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement,
+but in order to avoid inconsistency the Agreement is copyrighted and
+may only be modified in the following manner. The Agreement Steward
+reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement
+Steward has the right to modify this Agreement. The Eclipse Foundation
+is the initial Agreement Steward. The Eclipse Foundation may assign the
+responsibility to serve as the Agreement Steward to a suitable separate
+entity. Each new version of the Agreement will be given a distinguishing
+version number. The Program (including Contributions) may always be
+Distributed subject to the version of the Agreement under which it was
+received. In addition, after a new version of the Agreement is published,
+Contributor may elect to Distribute the Program (including its
+Contributions) under the new version.
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+receives no rights or licenses to the intellectual property of any
+Contributor under this Agreement, whether expressly, by implication,
+estoppel or otherwise. All rights in the Program not expressly granted
+under this Agreement are reserved. Nothing in this Agreement is intended
+to be enforceable by any entity that is not a Contributor or Recipient.
+No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A - Form of Secondary Licenses Notice
+
+"This Source Code may also be made available under the following 
+Secondary Licenses when the conditions for such availability set forth 
+in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+version(s), and exceptions or additional permissions here}."
+
+  Simply including a copy of this Agreement, including this Exhibit A
+  is not sufficient to license the Source Code under Secondary Licenses.
+
+  If it is not possible or desirable to put the notice in a particular
+  file, then You may include the notice in a location (such as a LICENSE
+  file in a relevant directory) where a recipient would be likely to
+  look for such a notice.
+
+  You may add additional accurate notices of copyright ownership.
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos.feature/build.properties b/org.eclipse.osbp.fork.jpos.feature/build.properties
new file mode 100644
index 0000000..0ea4044
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos.feature/build.properties
@@ -0,0 +1,10 @@
+bin.includes = feature.xml,\
+               feature.properties,\
+               notice.html,\
+               license.html,\
+               LICENSE.txt,\
+               epl-v10.html
+src.includes = license.html,\
+               LICENSE.txt,\
+               notice.html,\
+               epl-v10.html			   
diff --git a/org.eclipse.osbp.fork.jpos.feature/epl-v10.html b/org.eclipse.osbp.fork.jpos.feature/epl-v10.html
new file mode 100644
index 0000000..b398acc
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos.feature/epl-v10.html
@@ -0,0 +1,259 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+  body {
+    size: 8.5in 11.0in;
+    margin: 0.25in 0.5in 0.25in 0.5in;
+    tab-interval: 0.5in;
+    }
+  p {  	
+    margin-left: auto;
+    margin-top:  0.5em;
+    margin-bottom: 0.5em;
+    }
+  p.list {
+  	margin-left: 0.5in;
+    margin-top:  0.05em;
+    margin-bottom: 0.05em;
+    }
+  </style>
+
+</head>
+
+<body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>"Contribution" means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">where such changes and/or additions to the Program
+originate from and are distributed by that particular Contributor. A
+Contribution 'originates' from a Contributor if it was added to the
+Program by such Contributor itself or anyone acting on such
+Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.</p>
+
+<p>"Contributor" means any person or entity that distributes
+the Program.</p>
+
+<p>"Licensed Patents" mean patent claims licensable by a
+Contributor which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.</p>
+
+<p>"Program" means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>"Recipient" means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">a) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works
+of, publicly display, publicly perform, distribute and sublicense the
+Contribution of such Contributor, if any, and such derivative works, in
+source code and object code form.</p>
+
+<p class="list">b) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell,
+offer to sell, import and otherwise transfer the Contribution of such
+Contributor, if any, in source code and object code form. This patent
+license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.</p>
+
+<p class="list">c) Recipient understands that although each Contributor
+grants the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.</p>
+
+<p class="list">d) Each Contributor represents that to its knowledge it
+has sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">i) effectively disclaims on behalf of all Contributors
+all warranties and conditions, express and implied, including warranties
+or conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and
+indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses")
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In
+order to qualify, an Indemnified Contributor must: a) promptly notify
+the Commercial Contributor in writing of such claim, and b) allow the
+Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own
+expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable laws,
+damage to or loss of data, programs or equipment, and unavailability or
+interruption of operations.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), 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 OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the
+date such litigation is filed.</p>
+
+<p>All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of time
+after becoming aware of such noncompliance. If all Recipient's rights
+under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive.</p>
+
+<p>Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other than the
+Agreement Steward has the right to modify this Agreement. The Eclipse
+Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a
+suitable separate entity. Each new version of the Agreement will be
+given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version
+of the Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.</p>
+
+
+
+</body></html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos.feature/feature.properties b/org.eclipse.osbp.fork.jpos.feature/feature.properties
new file mode 100644
index 0000000..5817aee
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos.feature/feature.properties
@@ -0,0 +1,204 @@
+#=======================================================================
+# Copyright (c) 2011, 2017 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany).
+# This program and the accompanying materials are made available under the 
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+# 
+# SPDX-License-Identifier: EPL-2.0
+# 
+# Contributors:
+# Loetz GmbH&Co.KG - initial API and implementation 
+#=======================================================================
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName =OSBP JavaPOS fork
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse OSBP
+
+# "description" property - description of the feature
+description=This feature provides the OSBP fork of JavaPOS bundle.\n\
+ The code is derived from http://www.javapos.org/downloads/JavaPOS-1.14.0-Source-20131024.zip
+
+# "updateSiteName" property - label for the update site
+updateSiteName=
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2011, 2017 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) and others. \n\
+This program and the accompanying materials are made available under the \n\
+terms of the Eclipse Public License 2.0 which is available at\n\
+http://www.eclipse.org/legal/epl-2.0.\n\
+\n\
+SPDX-License-Identifier: EPL-2.0 \n\
+\n\
+Contributors:\n\
+    Loetz GmbH&amp;Co.KG - initial API and basis\n\
+\n\
+The included JavaPOS code is licensed as follows:\n\
+* This software is provided "AS IS".  The JavaPOS working group (including\n\
+* each of the Corporate members, contributors and individuals)  MAKES NO\n\
+* REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,\n\
+* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED\n\
+* WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n\
+* NON-INFRINGEMENT. The JavaPOS working group shall not be liable for\n\
+* any damages suffered as a result of using, modifying or distributing this\n\
+* software or its derivatives.Permission to use, copy, modify, and distribute\n\
+* the software and its documentation for any purpose is hereby granted.\n\
+\n
+################ end of copyright property ####################################
+
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+\n\
+November 22, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION\n\
+AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT"). USE OF\n\
+THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE\n\
+TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED\n\
+BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE\n\
+AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS OF ANY\n\
+APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU\n\
+MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the Eclipse Foundation\n\
+is provided to you under the terms and conditions of the Eclipse Public License\n\
+Version 2.0 ("EPL"). A copy of the EPL is provided with this Content and is also\n\
+available at http://www.eclipse.org/legal/epl-2.0. For purposes of the EPL,\n\
+"Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code, documentation\n\
+and other files maintained in the Eclipse Foundation source code repository\n\
+("Repository") in software modules ("Modules") and made available as\n\
+downloadable archives ("Downloads").\n\
+\n\
+-   Content may be structured and packaged into modules to facilitate\n\
+    delivering, extending, and upgrading the Content. Typical modules may\n\
+    include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and\n\
+    features ("Features").\n\
+-   Each Plug-in or Fragment may be packaged as a sub-directory or JAR\n\
+    (Java™ ARchive) in a directory named "plugins".\n\
+-   A Feature is a bundle of one or more Plug-ins and/or Fragments and\n\
+    associated material. Each Feature may be packaged as a sub-directory in a\n\
+    directory named "features". Within a Feature, files named "feature.xml" may\n\
+    contain a list of the names and version numbers of the Plug-ins and/or\n\
+    Fragments associated with that Feature.\n\
+-   Features may also include other Features ("Included Features"). Within a\n\
+    Feature, files named "feature.xml" may contain a list of the names and\n\
+    version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be contained in\n\
+files named "about.html" ("Abouts"). The terms and conditions governing Features\n\
+and Included Features should be contained in files named "license.html"\n\
+("Feature Licenses"). Abouts and Feature Licenses may be located in any\n\
+directory of a Download or Module including, but not limited to the following\n\
+locations:\n\
+\n\
+-   The top-level (root) directory\n\
+-   Plug-in and Fragment directories\n\
+-   Inside Plug-ins and Fragments packaged as JARs\n\
+-   Sub-directories of the directory named "src" of certain Plug-ins\n\
+-   Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using\n\
+the Provisioning Technology (as defined below), you must agree to a license\n\
+("Feature Update License") during the installation process. If the Feature\n\
+contains Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform you\n\
+where you can locate them. Feature Update Licenses may be found in the "license"\n\
+property of files named "feature.properties" found within a Feature. Such\n\
+Abouts, Feature Licenses, and Feature Update Licenses contain the terms and\n\
+conditions (or references to such terms and conditions) that govern your use of\n\
+the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL\n\
+OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE\n\
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+-   Eclipse Public License Version 1.0 (available at\n\
+    http://www.eclipse.org/legal/epl-v10.html)\n\
+-   Eclipse Distribution License Version 1.0 (available at\n\
+    http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+-   Common Public License Version 1.0 (available at\n\
+    http://www.eclipse.org/legal/cpl-v10.html)\n\
+-   Apache Software License 1.1 (available at\n\
+    http://www.apache.org/licenses/LICENSE)\n\
+-   Apache Software License 2.0 (available at\n\
+    http://www.apache.org/licenses/LICENSE-2.0)\n\
+-   Mozilla Public License Version 1.1 (available at\n\
+    http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO\n\
+USE OF THE CONTENT. If no About, Feature License, or Feature Update License is\n\
+provided, please contact the Eclipse Foundation to determine what terms and\n\
+conditions govern that particular Content.\n\
+\n\
+Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which\n\
+include, but are not limited to, p2 and the Eclipse Update Manager\n\
+("Provisioning Technology") for the purpose of allowing users to install\n\
+software, documentation, information and/or other materials (collectively\n\
+"Installable Software"). This capability is provided with the intent of allowing\n\
+such users to install, extend and update Eclipse-based products. Information\n\
+about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install\n\
+Installable Software. You shall be responsible for enabling the applicable\n\
+license agreements relating to the Installable Software to be presented to, and\n\
+accepted by, the users of the Provisioning Technology in accordance with the\n\
+Specification. By using Provisioning Technology in such a manner and making it\n\
+available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the\n\
+following:\n\
+\n\
+1.  A series of actions may occur ("Provisioning Process") in which a user may\n\
+    execute the Provisioning Technology on a machine ("Target Machine") with the\n\
+    intent of installing, extending or updating the functionality of an\n\
+    Eclipse-based product.\n\
+2.  During the Provisioning Process, the Provisioning Technology may cause third\n\
+    party Installable Software or a portion thereof to be accessed and copied to\n\
+    the Target Machine.\n\
+3.  Pursuant to the Specification, you will provide to the user the terms and\n\
+    conditions that govern the use of the Installable Software ("Installable\n\
+    Software Agreement") and such Installable Software Agreement shall be\n\
+    accessed from the Target Machine in accordance with the Specification. Such\n\
+    Installable Software Agreement must inform the user of the terms and\n\
+    conditions that govern the Installable Software and must solicit acceptance\n\
+    by the end user in the manner prescribed in such Installable\n\
+    Software Agreement. Upon such indication of agreement by the user, the\n\
+    provisioning Technology will complete installation of the\n\
+    Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are currently\n\
+may have restrictions on the import, possession, and use, and/or re-export to\n\
+another country, of encryption software. BEFORE using any encryption software,\n\
+please check the country's laws, regulations and policies concerning the import,\n\
+possession, or use, and re-export of encryption software, to see if this is\n\
+permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the\n\
+United States, other countries, or both.\n\
+n\
+########### end of license property ##########################################
diff --git a/org.eclipse.osbp.fork.jpos.feature/feature.xml b/org.eclipse.osbp.fork.jpos.feature/feature.xml
new file mode 100644
index 0000000..73af690
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos.feature/feature.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+        id="org.eclipse.osbp.fork.jpos.feature"
+        label="%featureName"
+        version="1.14.0.qualifier"
+        provider-name="%providerName"
+		plugin="org.eclipse.osbp.fork.jpos">
+
+    <description>
+        %description
+    </description>
+        
+    <copyright>
+        %copyright
+    </copyright>
+        
+    <license url="%licenseURL">
+        %license
+    </license>
+        
+    <plugin
+        id="org.eclipse.osbp.fork.jpos"
+        download-size="0"
+        install-size="0"
+        version="0.0.0"
+        unpack="false"/>
+        
+        
+        
+</feature>
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos.feature/license.html b/org.eclipse.osbp.fork.jpos.feature/license.html
new file mode 100644
index 0000000..637a181
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos.feature/license.html
@@ -0,0 +1,300 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>Eclipse Public License - Version 2.0</title>
+    <style type="text/css">
+      body {
+        margin: 1.5em 3em;
+      }
+      h1{
+        font-size:1.5em;
+      }
+      h2{
+        font-size:1em;
+        margin-bottom:0.5em;
+        margin-top:1em;
+      }
+      p {
+        margin-top:  0.5em;
+        margin-bottom: 0.5em;
+      }
+      ul, ol{
+        list-style-type:none;
+      }
+    </style>
+  </head>
+  <body>
+    <h1>Eclipse Public License - v 2.0</h1>
+    <p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+      PUBLIC LICENSE (&ldquo;AGREEMENT&rdquo;). ANY USE, REPRODUCTION OR DISTRIBUTION
+      OF THE PROGRAM CONSTITUTES RECIPIENT&#039;S ACCEPTANCE OF THIS AGREEMENT.
+    </p>
+    <h2 id="definitions">1. DEFINITIONS</h2>
+    <p>&ldquo;Contribution&rdquo; means:</p>
+    <ul>
+      <li>a) in the case of the initial Contributor, the initial content
+        Distributed under this Agreement, and
+      </li>
+      <li>
+        b) in the case of each subsequent Contributor:
+        <ul>
+          <li>i) changes to the Program, and</li>
+          <li>ii) additions to the Program;</li>
+        </ul>
+        where such changes and/or additions to the Program originate from
+        and are Distributed by that particular Contributor. A Contribution
+        &ldquo;originates&rdquo; from a Contributor if it was added to the Program by such
+        Contributor itself or anyone acting on such Contributor&#039;s behalf.
+        Contributions do not include changes or additions to the Program that
+        are not Modified Works.
+      </li>
+    </ul>
+    <p>&ldquo;Contributor&rdquo; means any person or entity that Distributes the Program.</p>
+    <p>&ldquo;Licensed Patents&rdquo; mean patent claims licensable by a Contributor which
+      are necessarily infringed by the use or sale of its Contribution alone
+      or when combined with the Program.
+    </p>
+    <p>&ldquo;Program&rdquo; means the Contributions Distributed in accordance with this
+      Agreement.
+    </p>
+    <p>&ldquo;Recipient&rdquo; means anyone who receives the Program under this Agreement
+      or any Secondary License (as applicable), including Contributors.
+    </p>
+    <p>&ldquo;Derivative Works&rdquo; shall mean any work, whether in Source Code or other
+      form, that is based on (or derived from) the Program and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship.
+    </p>
+    <p>&ldquo;Modified Works&rdquo; shall mean any work in Source Code or other form that
+      results from an addition to, deletion from, or modification of the
+      contents of the Program, including, for purposes of clarity any new file
+      in Source Code form that contains any contents of the Program. Modified
+      Works shall not include works that contain only declarations, interfaces,
+      types, classes, structures, or files of the Program solely in each case
+      in order to link to, bind by name, or subclass the Program or Modified
+      Works thereof.
+    </p>
+    <p>&ldquo;Distribute&rdquo; means the acts of a) distributing or b) making available
+      in any manner that enables the transfer of a copy.
+    </p>
+    <p>&ldquo;Source Code&rdquo; means the form of a Program preferred for making
+      modifications, including but not limited to software source code,
+      documentation source, and configuration files.
+    </p>
+    <p>&ldquo;Secondary License&rdquo; means either the GNU General Public License,
+      Version 2.0, or any later versions of that license, including any
+      exceptions or additional permissions as identified by the initial
+      Contributor.
+    </p>
+    <h2 id="grant-of-rights">2. GRANT OF RIGHTS</h2>
+    <ul>
+      <li>a) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free copyright
+        license to reproduce, prepare Derivative Works of, publicly display,
+        publicly perform, Distribute and sublicense the Contribution of such
+        Contributor, if any, and such Derivative Works.
+      </li>
+      <li>b) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free patent
+        license under Licensed Patents to make, use, sell, offer to sell,
+        import and otherwise transfer the Contribution of such Contributor,
+        if any, in Source Code or other form. This patent license shall
+        apply to the combination of the Contribution and the Program if,
+        at the time the Contribution is added by the Contributor, such
+        addition of the Contribution causes such combination to be covered
+        by the Licensed Patents. The patent license shall not apply to any
+        other combinations which include the Contribution. No hardware per
+        se is licensed hereunder.
+      </li>
+      <li>c) Recipient understands that although each Contributor grants the
+        licenses to its Contributions set forth herein, no assurances are
+        provided by any Contributor that the Program does not infringe the
+        patent or other intellectual property rights of any other entity.
+        Each Contributor disclaims any liability to Recipient for claims
+        brought by any other entity based on infringement of intellectual
+        property rights or otherwise. As a condition to exercising the rights
+        and licenses granted hereunder, each Recipient hereby assumes sole
+        responsibility to secure any other intellectual property rights needed,
+        if any. For example, if a third party patent license is required to
+        allow Recipient to Distribute the Program, it is Recipient&#039;s
+        responsibility to acquire that license before distributing the Program.
+      </li>
+      <li>d) Each Contributor represents that to its knowledge it has sufficient
+        copyright rights in its Contribution, if any, to grant the copyright
+        license set forth in this Agreement.
+      </li>
+      <li>e) Notwithstanding the terms of any Secondary License, no Contributor
+        makes additional grants to any Recipient (other than those set forth
+        in this Agreement) as a result of such Recipient&#039;s receipt of the
+        Program under the terms of a Secondary License (if permitted under
+        the terms of Section 3).
+      </li>
+    </ul>
+    <h2 id="requirements">3. REQUIREMENTS</h2>
+    <p>3.1 If a Contributor Distributes the Program in any form, then:</p>
+    <ul>
+      <li>a) the Program must also be made available as Source Code, in
+        accordance with section 3.2, and the Contributor must accompany
+        the Program with a statement that the Source Code for the Program
+        is available under this Agreement, and informs Recipients how to
+        obtain it in a reasonable manner on or through a medium customarily
+        used for software exchange; and
+      </li>
+      <li>
+        b) the Contributor may Distribute the Program under a license
+        different than this Agreement, provided that such license:
+        <ul>
+          <li>i) effectively disclaims on behalf of all other Contributors all
+            warranties and conditions, express and implied, including warranties
+            or conditions of title and non-infringement, and implied warranties
+            or conditions of merchantability and fitness for a particular purpose;
+          </li>
+          <li>ii) effectively excludes on behalf of all other Contributors all
+            liability for damages, including direct, indirect, special, incidental
+            and consequential damages, such as lost profits;
+          </li>
+          <li>iii) does not attempt to limit or alter the recipients&#039; rights in the
+            Source Code under section 3.2; and
+          </li>
+          <li>iv) requires any subsequent distribution of the Program by any party
+            to be under a license that satisfies the requirements of this section 3.
+          </li>
+        </ul>
+      </li>
+    </ul>
+    <p>3.2 When the Program is Distributed as Source Code:</p>
+    <ul>
+      <li>a) it must be made available under this Agreement, or if the Program (i)
+        is combined with other material in a separate file or files made available
+        under a Secondary License, and (ii) the initial Contributor attached to
+        the Source Code the notice described in Exhibit A of this Agreement,
+        then the Program may be made available under the terms of such
+        Secondary Licenses, and
+      </li>
+      <li>b) a copy of this Agreement must be included with each copy of the Program.</li>
+    </ul>
+    <p>3.3 Contributors may not remove or alter any copyright, patent, trademark,
+      attribution notices, disclaimers of warranty, or limitations of liability
+      (&lsquo;notices&rsquo;) contained within the Program from any copy of the Program which
+      they Distribute, provided that Contributors may add their own appropriate
+      notices.
+    </p>
+    <h2 id="commercial-distribution">4. COMMERCIAL DISTRIBUTION</h2>
+    <p>Commercial distributors of software may accept certain responsibilities
+      with respect to end users, business partners and the like. While this
+      license is intended to facilitate the commercial use of the Program, the
+      Contributor who includes the Program in a commercial product offering should
+      do so in a manner which does not create potential liability for other
+      Contributors. Therefore, if a Contributor includes the Program in a
+      commercial product offering, such Contributor (&ldquo;Commercial Contributor&rdquo;)
+      hereby agrees to defend and indemnify every other Contributor
+      (&ldquo;Indemnified Contributor&rdquo;) against any losses, damages and costs
+      (collectively &ldquo;Losses&rdquo;) arising from claims, lawsuits and other legal actions
+      brought by a third party against the Indemnified Contributor to the extent
+      caused by the acts or omissions of such Commercial Contributor in connection
+      with its distribution of the Program in a commercial product offering.
+      The obligations in this section do not apply to any claims or Losses relating
+      to any actual or alleged intellectual property infringement. In order to
+      qualify, an Indemnified Contributor must: a) promptly notify the
+      Commercial Contributor in writing of such claim, and b) allow the Commercial
+      Contributor to control, and cooperate with the Commercial Contributor in,
+      the defense and any related settlement negotiations. The Indemnified
+      Contributor may participate in any such claim at its own expense.
+    </p>
+    <p>For example, a Contributor might include the Program
+      in a commercial product offering, Product X. That Contributor is then a
+      Commercial Contributor. If that Commercial Contributor then makes performance
+      claims, or offers warranties related to Product X, those performance claims
+      and warranties are such Commercial Contributor&#039;s responsibility alone.
+      Under this section, the Commercial Contributor would have to defend claims
+      against the other Contributors related to those performance claims and
+      warranties, and if a court requires any other Contributor to pay any damages
+      as a result, the Commercial Contributor must pay those damages.
+    </p>
+    <h2 id="warranty">5. NO WARRANTY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN &ldquo;AS IS&rdquo; BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+      WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+      MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
+      solely responsible for determining the appropriateness of using and
+      distributing the Program and assumes all risks associated with its
+      exercise of rights under this Agreement, including but not limited to the
+      risks and costs of program errors, compliance with applicable laws, damage
+      to or loss of data, programs or equipment, and unavailability or
+      interruption of operations.
+    </p>
+    <h2 id="disclaimer">6. DISCLAIMER OF LIABILITY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY
+      LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+      OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+      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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+      GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+    </p>
+    <h2 id="general">7. GENERAL</h2>
+    <p>If any provision of this Agreement is invalid or unenforceable under
+      applicable law, it shall not affect the validity or enforceability of the
+      remainder of the terms of this Agreement, and without further action by the
+      parties hereto, such provision shall be reformed to the minimum extent
+      necessary to make such provision valid and enforceable.
+    </p>
+    <p>If Recipient institutes patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+      (excluding combinations of the Program with other software or hardware)
+      infringes such Recipient&#039;s patent(s), then such Recipient&#039;s rights granted
+      under Section 2(b) shall terminate as of the date such litigation is filed.
+    </p>
+    <p>All Recipient&#039;s rights under this Agreement shall terminate if it fails to
+      comply with any of the material terms or conditions of this Agreement and
+      does not cure such failure in a reasonable period of time after becoming
+      aware of such noncompliance. If all Recipient&#039;s rights under this Agreement
+      terminate, Recipient agrees to cease use and distribution of the Program
+      as soon as reasonably practicable. However, Recipient&#039;s obligations under
+      this Agreement and any licenses granted by Recipient relating to the
+      Program shall continue and survive.
+    </p>
+    <p>Everyone is permitted to copy and distribute copies of this Agreement,
+      but in order to avoid inconsistency the Agreement is copyrighted and may
+      only be modified in the following manner. The Agreement Steward reserves
+      the right to publish new versions (including revisions) of this Agreement
+      from time to time. No one other than the Agreement Steward has the right
+      to modify this Agreement. The Eclipse Foundation is the initial Agreement
+      Steward. The Eclipse Foundation may assign the responsibility to serve as
+      the Agreement Steward to a suitable separate entity. Each new version of
+      the Agreement will be given a distinguishing version number. The Program
+      (including Contributions) may always be Distributed subject to the version
+      of the Agreement under which it was received. In addition, after a new
+      version of the Agreement is published, Contributor may elect to Distribute
+      the Program (including its Contributions) under the new version.
+    </p>
+    <p>Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+      receives no rights or licenses to the intellectual property of any
+      Contributor under this Agreement, whether expressly, by implication,
+      estoppel or otherwise. All rights in the Program not expressly granted
+      under this Agreement are reserved. Nothing in this Agreement is intended
+      to be enforceable by any entity that is not a Contributor or Recipient.
+      No third-party beneficiary rights are created under this Agreement.
+    </p>
+    <h2 id="exhibit-a">Exhibit A &ndash; Form of Secondary Licenses Notice</h2>
+    <p>&ldquo;This Source Code may also be made available under the following 
+    	Secondary Licenses when the conditions for such availability set forth 
+    	in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+    	version(s), and exceptions or additional permissions here}.&rdquo;
+    </p>
+    <blockquote>
+      <p>Simply including a copy of this Agreement, including this Exhibit A
+        is not sufficient to license the Source Code under Secondary Licenses.
+      </p>
+      <p>If it is not possible or desirable to put the notice in a particular file,
+        then You may include the notice in a location (such as a LICENSE file in a
+        relevant directory) where a recipient would be likely to look for
+        such a notice.
+      </p>
+      <p>You may add additional accurate notices of copyright ownership.</p>
+    </blockquote>
+  </body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos.feature/notice.html b/org.eclipse.osbp.fork.jpos.feature/notice.html
new file mode 100644
index 0000000..81fca9d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos.feature/notice.html
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+	<h2>Eclipse Foundation Software User Agreement</h2>
+	<p>November 22, 2014</p>
+
+	<h3>Usage Of Content</h3>
+
+	<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION,
+		INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+		(COLLECTIVELY &quot;CONTENT&quot;). USE OF THE CONTENT IS GOVERNED BY
+		THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+		CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED
+		BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS
+		GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY
+		APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED
+		BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS
+		AGREEMENT AND THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE
+		AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT
+		USE THE CONTENT.</p>
+
+	<h3>Applicable Licenses</h3>
+
+	<p>
+		Unless otherwise indicated, all Content made available by the Eclipse
+		Foundation is provided to you under the terms and conditions of the
+		Eclipse Public License Version 2.0 (&quot;EPL&quot;). A copy of the
+		EPL is provided with this Content and is also available at <a
+			href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
+		For purposes of the EPL, &quot;Program&quot; will mean the Content.
+	</p>
+
+	<p>Content includes, but is not limited to, source code, object
+		code, documentation and other files maintained in the Eclipse
+		Foundation source code repository (&quot;Repository&quot;) in software
+		modules (&quot;Modules&quot;) and made available as downloadable
+		archives (&quot;Downloads&quot;).</p>
+
+	<ul>
+		<li>Content may be structured and packaged into modules to
+			facilitate delivering, extending, and upgrading the Content. Typical
+			modules may include plug-ins (&quot;Plug-ins&quot;), plug-in
+			fragments (&quot;Fragments&quot;), and features
+			(&quot;Features&quot;).</li>
+		<li>Each Plug-in or Fragment may be packaged as a sub-directory
+			or JAR (Java&trade; ARchive) in a directory named
+			&quot;plugins&quot;.</li>
+		<li>A Feature is a bundle of one or more Plug-ins and/or
+			Fragments and associated material. Each Feature may be packaged as a
+			sub-directory in a directory named &quot;features&quot;. Within a
+			Feature, files named &quot;feature.xml&quot; may contain a list of
+			the names and version numbers of the Plug-ins and/or Fragments
+			associated with that Feature.</li>
+		<li>Features may also include other Features (&quot;Included
+			Features&quot;). Within a Feature, files named
+			&quot;feature.xml&quot; may contain a list of the names and version
+			numbers of Included Features.</li>
+	</ul>
+
+	<p>The terms and conditions governing Plug-ins and Fragments should
+		be contained in files named &quot;about.html&quot;
+		(&quot;Abouts&quot;). The terms and conditions governing Features and
+		Included Features should be contained in files named
+		&quot;license.html&quot; (&quot;Feature Licenses&quot;). Abouts and
+		Feature Licenses may be located in any directory of a Download or
+		Module including, but not limited to the following locations:</p>
+
+	<ul>
+		<li>The top-level (root) directory</li>
+		<li>Plug-in and Fragment directories</li>
+		<li>Inside Plug-ins and Fragments packaged as JARs</li>
+		<li>Sub-directories of the directory named &quot;src&quot; of
+			certain Plug-ins</li>
+		<li>Feature directories</li>
+	</ul>
+
+	<p>Note: if a Feature made available by the Eclipse Foundation is
+		installed using the Provisioning Technology (as defined below), you
+		must agree to a license (&quot;Feature Update License&quot;) during
+		the installation process. If the Feature contains Included Features,
+		the Feature Update License should either provide you with the terms
+		and conditions governing the Included Features or inform you where you
+		can locate them. Feature Update Licenses may be found in the
+		&quot;license&quot; property of files named
+		&quot;feature.properties&quot; found within a Feature. Such Abouts,
+		Feature Licenses, and Feature Update Licenses contain the terms and
+		conditions (or references to such terms and conditions) that govern
+		your use of the associated Content in that directory.</p>
+
+	<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY
+		REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND
+		CONDITIONS. SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT
+		ARE NOT LIMITED TO):</p>
+
+	<ul>
+		<li>Eclipse Public License Version 1.0 (available at <a
+			href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>)
+		</li>
+		<li>Eclipse Distribution License Version 1.0 (available at <a
+			href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)
+		</li>
+		<li>Common Public License Version 1.0 (available at <a
+			href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)
+		</li>
+		<li>Apache Software License 1.1 (available at <a
+			href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)
+		</li>
+		<li>Apache Software License 2.0 (available at <a
+			href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)
+		</li>
+		<li>Mozilla Public License Version 1.1 (available at <a
+			href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)
+		</li>
+	</ul>
+
+	<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND
+		CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License,
+		or Feature Update License is provided, please contact the Eclipse
+		Foundation to determine what terms and conditions govern that
+		particular Content.</p>
+
+
+	<h3>Use of Provisioning Technology</h3>
+
+	<p>
+		The Eclipse Foundation makes available provisioning software, examples
+		of which include, but are not limited to, p2 and the Eclipse Update
+		Manager (&quot;Provisioning Technology&quot;) for the purpose of
+		allowing users to install software, documentation, information and/or
+		other materials (collectively &quot;Installable Software&quot;). This
+		capability is provided with the intent of allowing such users to
+		install, extend and update Eclipse-based products. Information about
+		packaging Installable Software is available at <a
+			href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+		(&quot;Specification&quot;).
+	</p>
+
+	<p>You may use Provisioning Technology to allow other parties to
+		install Installable Software. You shall be responsible for enabling
+		the applicable license agreements relating to the Installable Software
+		to be presented to, and accepted by, the users of the Provisioning
+		Technology in accordance with the Specification. By using Provisioning
+		Technology in such a manner and making it available in accordance with
+		the Specification, you further acknowledge your agreement to, and the
+		acquisition of all necessary rights to permit the following:</p>
+
+	<ol>
+		<li>A series of actions may occur (&quot;Provisioning
+			Process&quot;) in which a user may execute the Provisioning
+			Technology on a machine (&quot;Target Machine&quot;) with the intent
+			of installing, extending or updating the functionality of an
+			Eclipse-based product.</li>
+		<li>During the Provisioning Process, the Provisioning Technology
+			may cause third party Installable Software or a portion thereof to be
+			accessed and copied to the Target Machine.</li>
+		<li>Pursuant to the Specification, you will provide to the user
+			the terms and conditions that govern the use of the Installable
+			Software (&quot;Installable Software Agreement&quot;) and such
+			Installable Software Agreement shall be accessed from the Target
+			Machine in accordance with the Specification. Such Installable
+			Software Agreement must inform the user of the terms and conditions
+			that govern the Installable Software and must solicit acceptance by
+			the end user in the manner prescribed in such Installable Software
+			Agreement. Upon such indication of agreement by the user, the
+			provisioning Technology will complete installation of the Installable
+			Software.</li>
+	</ol>
+
+	<h3>Cryptography</h3>
+
+	<p>Content may contain encryption software. The country in which
+		you are currently may have restrictions on the import, possession, and
+		use, and/or re-export to another country, of encryption software.
+		BEFORE using any encryption software, please check the country's laws,
+		regulations and policies concerning the import, possession, or use,
+		and re-export of encryption software, to see if this is permitted.</p>
+
+	<p>
+		<small>Java and all Java-based trademarks are trademarks of
+			Oracle Corporation in the United States, other countries, or both.</small>
+	</p>
+</body>
+</html>
diff --git a/org.eclipse.osbp.fork.jpos.feature/pom.xml b/org.eclipse.osbp.fork.jpos.feature/pom.xml
new file mode 100644
index 0000000..5388492
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos.feature/pom.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+#=======================================================================
+# Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany).
+# This program and the accompanying materials are made available under the 
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+# 
+# SPDX-License-Identifier: EPL-2.0
+# 
+# Contributors:
+# Loetz GmbH&Co.KG - initial API and implementation 
+#=======================================================================
+-->
+<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/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.eclipse.osbp.fork.jpos</groupId>
+        <artifactId>org.eclipse.osbp.fork.jpos.aggregator</artifactId>
+	    <version>1.14.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>org.eclipse.osbp.fork.jpos.feature</artifactId>
+    <packaging>eclipse-feature</packaging>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.eclipse.tycho.extras</groupId>
+                <artifactId>tycho-source-feature-plugin</artifactId>
+                <version>${tychoExtrasVersion}</version>
+                <executions>
+                    <execution>
+                        <id>source-feature</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>source-feature</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <labelSuffix> (source)</labelSuffix>
+                </configuration>
+            </plugin>
+            <plugin>
+                <!-- workaround while bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=398250 
+					is not fixed -->
+                <groupId>org.eclipse.tycho</groupId>
+                <artifactId>tycho-p2-plugin</artifactId>
+                <version>${tycho-version}</version>
+                <executions>
+                    <execution>
+                        <id>attached-p2-metadata</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>p2-metadata</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+			<plugin>
+				<artifactId>maven-javadoc-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>javadoc-jar</id>
+						<phase>package</phase>
+						<goals>
+							<goal>jar</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+        </plugins>
+    </build>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.eclipse.osbp.fork.jpos</groupId>
+            <artifactId>org.eclipse.osbp.fork.jpos</artifactId>
+            <version>${project.version}</version>
+			<scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/org.eclipse.osbp.fork.jpos.feature/src/main/javadoc/README.txt b/org.eclipse.osbp.fork.jpos.feature/src/main/javadoc/README.txt
new file mode 100644
index 0000000..831da7e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos.feature/src/main/javadoc/README.txt
@@ -0,0 +1 @@
+Resource folder for javadoc resources.
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos.feature/src/overview.html b/org.eclipse.osbp.fork.jpos.feature/src/overview.html
new file mode 100644
index 0000000..06b85d6
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos.feature/src/overview.html
@@ -0,0 +1,9 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+	<title>OSBP fork.jpos</title>
+</head>
+<body>
+<p>The <strong>OSBP&nbsp;fork.jpos</strong> provides bundles for the OSBP fork.jpos functionality.</p>
+</body>
+</html>
diff --git a/org.eclipse.osbp.fork.jpos/.classpath b/org.eclipse.osbp.fork.jpos/.classpath
new file mode 100644
index 0000000..cf36b56
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/.classpath
@@ -0,0 +1,7 @@
+<?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/"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.fork.jpos/.gitignore b/org.eclipse.osbp.fork.jpos/.gitignore
new file mode 100644
index 0000000..92145bc
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/.gitignore
@@ -0,0 +1,2 @@
+/bin/
+/target/
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/.project b/org.eclipse.osbp.fork.jpos/.project
new file mode 100644
index 0000000..dad8a60
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/.project
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.osbp.fork.jpos</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<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.pde.ds.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.babel.editor.rbeBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.babel.editor.rbeNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.osbp.fork.jpos/.settings/com.vaadin.integration.eclipse.prefs b/org.eclipse.osbp.fork.jpos/.settings/com.vaadin.integration.eclipse.prefs
new file mode 100644
index 0000000..e1173bc
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/.settings/com.vaadin.integration.eclipse.prefs
@@ -0,0 +1,2 @@
+com.vaadin.integration.eclipse.previousCompileAction=widgetset
+eclipse.preferences.version=1
diff --git a/org.eclipse.osbp.fork.jpos/.settings/org.eclipse.bpmn2.modeler.core.prefs b/org.eclipse.osbp.fork.jpos/.settings/org.eclipse.bpmn2.modeler.core.prefs
new file mode 100644
index 0000000..4bffcea
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/.settings/org.eclipse.bpmn2.modeler.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+target.runtime=org.jboss.runtime.jbpm5
diff --git a/org.eclipse.osbp.fork.jpos/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.fork.jpos/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.fork.jpos/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.fork.jpos/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..a698e59
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.8
+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.8
diff --git a/org.eclipse.osbp.fork.jpos/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.fork.jpos/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.fork.jpos/.settings/org.eclipse.pde.core.prefs b/org.eclipse.osbp.fork.jpos/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..f29e940
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+pluginProject.extensions=false
+resolve.requirebundle=false
diff --git a/org.eclipse.osbp.fork.jpos/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.fork.jpos/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..0933f8c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.fork.jpos/LICENSE.txt b/org.eclipse.osbp.fork.jpos/LICENSE.txt
new file mode 100644
index 0000000..e23ece2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/LICENSE.txt
@@ -0,0 +1,277 @@
+Eclipse Public License - v 2.0
+
+    THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+    PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
+    OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+  a) in the case of the initial Contributor, the initial content
+     Distributed under this Agreement, and
+
+  b) in the case of each subsequent Contributor:
+     i) changes to the Program, and
+     ii) additions to the Program;
+  where such changes and/or additions to the Program originate from
+  and are Distributed by that particular Contributor. A Contribution
+  "originates" from a Contributor if it was added to the Program by
+  such Contributor itself or anyone acting on such Contributor's behalf.
+  Contributions do not include changes or additions to the Program that
+  are not Modified Works.
+
+"Contributor" means any person or entity that Distributes the Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which
+are necessarily infringed by the use or sale of its Contribution alone
+or when combined with the Program.
+
+"Program" means the Contributions Distributed in accordance with this
+Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement
+or any Secondary License (as applicable), including Contributors.
+
+"Derivative Works" shall mean any work, whether in Source Code or other
+form, that is based on (or derived from) the Program and for which the
+editorial revisions, annotations, elaborations, or other modifications
+represent, as a whole, an original work of authorship.
+
+"Modified Works" shall mean any work in Source Code or other form that
+results from an addition to, deletion from, or modification of the
+contents of the Program, including, for purposes of clarity any new file
+in Source Code form that contains any contents of the Program. Modified
+Works shall not include works that contain only declarations,
+interfaces, types, classes, structures, or files of the Program solely
+in each case in order to link to, bind by name, or subclass the Program
+or Modified Works thereof.
+
+"Distribute" means the acts of a) distributing or b) making available
+in any manner that enables the transfer of a copy.
+
+"Source Code" means the form of a Program preferred for making
+modifications, including but not limited to software source code,
+documentation source, and configuration files.
+
+"Secondary License" means either the GNU General Public License,
+Version 2.0, or any later versions of that license, including any
+exceptions or additional permissions as identified by the initial
+Contributor.
+
+2. GRANT OF RIGHTS
+
+  a) Subject to the terms of this Agreement, each Contributor hereby
+  grants Recipient a non-exclusive, worldwide, royalty-free copyright
+  license to reproduce, prepare Derivative Works of, publicly display,
+  publicly perform, Distribute and sublicense the Contribution of such
+  Contributor, if any, and such Derivative Works.
+
+  b) Subject to the terms of this Agreement, each Contributor hereby
+  grants Recipient a non-exclusive, worldwide, royalty-free patent
+  license under Licensed Patents to make, use, sell, offer to sell,
+  import and otherwise transfer the Contribution of such Contributor,
+  if any, in Source Code or other form. This patent license shall
+  apply to the combination of the Contribution and the Program if, at
+  the time the Contribution is added by the Contributor, such addition
+  of the Contribution causes such combination to be covered by the
+  Licensed Patents. The patent license shall not apply to any other
+  combinations which include the Contribution. No hardware per se is
+  licensed hereunder.
+
+  c) Recipient understands that although each Contributor grants the
+  licenses to its Contributions set forth herein, no assurances are
+  provided by any Contributor that the Program does not infringe the
+  patent or other intellectual property rights of any other entity.
+  Each Contributor disclaims any liability to Recipient for claims
+  brought by any other entity based on infringement of intellectual
+  property rights or otherwise. As a condition to exercising the
+  rights and licenses granted hereunder, each Recipient hereby
+  assumes sole responsibility to secure any other intellectual
+  property rights needed, if any. For example, if a third party
+  patent license is required to allow Recipient to Distribute the
+  Program, it is Recipient's responsibility to acquire that license
+  before distributing the Program.
+
+  d) Each Contributor represents that to its knowledge it has
+  sufficient copyright rights in its Contribution, if any, to grant
+  the copyright license set forth in this Agreement.
+
+  e) Notwithstanding the terms of any Secondary License, no
+  Contributor makes additional grants to any Recipient (other than
+  those set forth in this Agreement) as a result of such Recipient's
+  receipt of the Program under the terms of a Secondary License
+  (if permitted under the terms of Section 3).
+
+3. REQUIREMENTS
+
+3.1 If a Contributor Distributes the Program in any form, then:
+
+  a) the Program must also be made available as Source Code, in
+  accordance with section 3.2, and the Contributor must accompany
+  the Program with a statement that the Source Code for the Program
+  is available under this Agreement, and informs Recipients how to
+  obtain it in a reasonable manner on or through a medium customarily
+  used for software exchange; and
+
+  b) the Contributor may Distribute the Program under a license
+  different than this Agreement, provided that such license:
+     i) effectively disclaims on behalf of all other Contributors all
+     warranties and conditions, express and implied, including
+     warranties or conditions of title and non-infringement, and
+     implied warranties or conditions of merchantability and fitness
+     for a particular purpose;
+
+     ii) effectively excludes on behalf of all other Contributors all
+     liability for damages, including direct, indirect, special,
+     incidental and consequential damages, such as lost profits;
+
+     iii) does not attempt to limit or alter the recipients' rights
+     in the Source Code under section 3.2; and
+
+     iv) requires any subsequent distribution of the Program by any
+     party to be under a license that satisfies the requirements
+     of this section 3.
+
+3.2 When the Program is Distributed as Source Code:
+
+  a) it must be made available under this Agreement, or if the
+  Program (i) is combined with other material in a separate file or
+  files made available under a Secondary License, and (ii) the initial
+  Contributor attached to the Source Code the notice described in
+  Exhibit A of this Agreement, then the Program may be made available
+  under the terms of such Secondary Licenses, and
+
+  b) a copy of this Agreement must be included with each copy of
+  the Program.
+
+3.3 Contributors may not remove or alter any copyright, patent,
+trademark, attribution notices, disclaimers of warranty, or limitations
+of liability ("notices") contained within the Program from any copy of
+the Program which they Distribute, provided that Contributors may add
+their own appropriate notices.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities
+with respect to end users, business partners and the like. While this
+license is intended to facilitate the commercial use of the Program,
+the Contributor who includes the Program in a commercial product
+offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes
+the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every
+other Contributor ("Indemnified Contributor") against any losses,
+damages and costs (collectively "Losses") arising from claims, lawsuits
+and other legal actions brought by a third party against the Indemnified
+Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program
+in a commercial product offering. The obligations in this section do not
+apply to any claims or Losses relating to any actual or alleged
+intellectual property infringement. In order to qualify, an Indemnified
+Contributor must: a) promptly notify the Commercial Contributor in
+writing of such claim, and b) allow the Commercial Contributor to control,
+and cooperate with the Commercial Contributor in, the defense and any
+related settlement negotiations. The Indemnified Contributor may
+participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those performance
+claims and warranties, and if a court requires any other Contributor to
+pay any damages as a result, the Commercial Contributor must pay
+those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
+BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
+TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
+PURPOSE. Each Recipient is solely responsible for determining the
+appropriateness of using and distributing the Program and assumes all
+risks associated with its exercise of rights under this Agreement,
+including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs
+or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
+SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE
+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further
+action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other software
+or hardware) infringes such Recipient's patent(s), then such Recipient's
+rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of
+time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use
+and distribution of the Program as soon as reasonably practicable.
+However, Recipient's obligations under this Agreement and any licenses
+granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement,
+but in order to avoid inconsistency the Agreement is copyrighted and
+may only be modified in the following manner. The Agreement Steward
+reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement
+Steward has the right to modify this Agreement. The Eclipse Foundation
+is the initial Agreement Steward. The Eclipse Foundation may assign the
+responsibility to serve as the Agreement Steward to a suitable separate
+entity. Each new version of the Agreement will be given a distinguishing
+version number. The Program (including Contributions) may always be
+Distributed subject to the version of the Agreement under which it was
+received. In addition, after a new version of the Agreement is published,
+Contributor may elect to Distribute the Program (including its
+Contributions) under the new version.
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+receives no rights or licenses to the intellectual property of any
+Contributor under this Agreement, whether expressly, by implication,
+estoppel or otherwise. All rights in the Program not expressly granted
+under this Agreement are reserved. Nothing in this Agreement is intended
+to be enforceable by any entity that is not a Contributor or Recipient.
+No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A - Form of Secondary Licenses Notice
+
+"This Source Code may also be made available under the following 
+Secondary Licenses when the conditions for such availability set forth 
+in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+version(s), and exceptions or additional permissions here}."
+
+  Simply including a copy of this Agreement, including this Exhibit A
+  is not sufficient to license the Source Code under Secondary Licenses.
+
+  If it is not possible or desirable to put the notice in a particular
+  file, then You may include the notice in a location (such as a LICENSE
+  file in a relevant directory) where a recipient would be likely to
+  look for such a notice.
+
+  You may add additional accurate notices of copyright ownership.
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/META-INF/MANIFEST.MF b/org.eclipse.osbp.fork.jpos/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..e66dbab
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/META-INF/MANIFEST.MF
@@ -0,0 +1,29 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Jpos
+Bundle-SymbolicName: org.eclipse.osbp.fork.jpos
+Bundle-Version: 1.14.0.qualifier
+DynamicImport-Package: *
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.apache.xerces;bundle-version="2.9.0",
+ org.eclipse.osgi,
+ org.eclipse.persistence.core
+Export-Package: jpos,
+ jpos.config,
+ jpos.config.simple,
+ jpos.config.simple.xml,
+ jpos.epson,
+ jpos.events,
+ jpos.loader,
+ jpos.loader.simple,
+ jpos.profile,
+ jpos.services,
+ jpos.util,
+ jpos.util.tracing
+Bundle-ActivationPolicy: lazy
+Import-Package: org.eclipse.core.internal.events,
+ org.osgi.service.component.annotations;version="1.2.0",
+ org.slf4j
+Bundle-Activator: jpos.Activator
+Service-Component: OSGI-INF/*.xml
+Bundle-Vendor: Eclipse OSBP
diff --git a/org.eclipse.osbp.fork.jpos/OSGI-INF/jpos.loader.JposServiceBinder.xml b/org.eclipse.osbp.fork.jpos/OSGI-INF/jpos.loader.JposServiceBinder.xml
new file mode 100644
index 0000000..688c057
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/OSGI-INF/jpos.loader.JposServiceBinder.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="jpos.loader.JposServiceBinder">
+   <reference bind="bindFactoryService" cardinality="0..n" interface="jpos.loader.JposServiceInstanceFactory" name="FactoryService" policy="dynamic" unbind="unbindFactoryService"/>
+   <implementation class="jpos.loader.JposServiceBinder"/>
+</scr:component>
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/about.html b/org.eclipse.osbp.fork.jpos/about.html
new file mode 100644
index 0000000..2e00d7e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/about.html
@@ -0,0 +1,80 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>About</title>
+</head>
+<body lang="EN-US">
+	<h2>About This Content</h2>
+
+	<p>
+		November 30, 2017
+	</p>
+	<h3>License</h3>
+
+	<p>
+		The Eclipse Foundation makes available all content in this plug-in
+		(&quot;Content&quot;). Unless otherwise indicated below, the Content
+		is provided to you under the terms and conditions of the Eclipse
+		Public License Version 2.0 (&quot;EPL&quot;). A copy of the EPL is
+		available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
+		For purposes of the EPL, &quot;Program&quot; will mean the Content.
+	</p>
+
+	<p>
+		If you did not receive this Content directly from the Eclipse
+		Foundation, the Content is being redistributed by another party
+		(&quot;Redistributor&quot;) and different terms and conditions may
+		apply to your use of any object code in the Content. Check the
+		Redistributor's license that was provided with the Content. If no such
+		license exists, contact the Redistributor. Unless otherwise indicated
+		below, the terms and conditions of the EPL still apply to any source
+		code in the Content and such source code may be obtained at <a
+			href="http://www.eclipse.org/">http://www.eclipse.org</a>.
+	</p>
+
+
+	<h3>Third Party Content</h3>
+	<p>The Content includes items that have been sourced from third
+		parties as set out below. If you did not receive this Content directly
+		from the Eclipse Foundation, the following is provided for
+		informational purposes only, and you should look to the
+		Redistributor's license for terms and conditions of use.</p>
+
+	<h4>JavaPOS 1.14.0</h4>
+	<p>Developed by a joint effort of leading retailers, hardware companies and software companies, 
+	the JavaPOS specification was the first technical standard to be endorsed by the National Retail Federation. 
+	It includes hardware vendors: Sun Microsystems, IBM, NCR, Epson, Fujitsu, Ultimate Technology, Star and Wincor Nixdorf; 
+	retailers: Home Depot, JC Penney, Kmart and Sears; and software companies: PCMS Datafit, RCS, Triversity, BearingPoint, 
+	360Commerce, and many others.<br> 
+	<br>
+	The NRF and its members, including the companies that display logos here, are embracing JavaPOS as a standard because 
+	this platform-independent technology can help ensure that point-of-sale environments-from existing POS terminals to 
+	emerging platforms including portable devices, the Web and smart cards-can communicate and share applications. 
+	Because Java applications can run on a wide variety of systems and devices-from telephony to POS to retail 
+	enterprise host systems-this technology holds great promise for the retail industry as it moves into its new 
+	generation of fully open solutions. <br>
+	<br>
+	<a href="http://www.javapos.org/">http://www.javapos.org/</a><br>
+	<br>
+	OSBP added OSGi capabilities to the bundle to make it work in an Eclipse based application.<br>
+	<br>
+	<h5>License</h5>
+	<p>
+	This software is provided "AS IS".  The JavaPOS working group (including
+	each of the Corporate members, contributors and individuals)  MAKES NO
+	REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+	EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+	WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+	NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+	any damages suffered as a result of using, modifying or distributing this
+	software or its derivatives. Permission to use, copy, modify, and distribute
+	the software and its documentation for any purpose is hereby granted. <br>
+	<br>
+	<a href="about_files/LICENSE.txt">LICENSE.TXT</a>
+	</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/about.ini b/org.eclipse.osbp.fork.jpos/about.ini
new file mode 100644
index 0000000..7df671f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/about.ini
@@ -0,0 +1,17 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%featureText
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=
+
+# Property "appName" contains name of the application (translated)
+appName=%featureName
+
+# Property "welcomePage" contains path to welcome page (special XML-based format)
+welcomePage=
diff --git a/org.eclipse.osbp.fork.jpos/about.mappings b/org.eclipse.osbp.fork.jpos/about.mappings
new file mode 100644
index 0000000..4511a0a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/about.mappings
@@ -0,0 +1,6 @@
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=qualifier
diff --git a/org.eclipse.osbp.fork.jpos/about.properties b/org.eclipse.osbp.fork.jpos/about.properties
new file mode 100644
index 0000000..9ef2da4
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/about.properties
@@ -0,0 +1,38 @@
+#
+# Copyright (c) 2012, 2016 - Loetz GmbH&Co.KG (Heidelberg)
+# 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:
+#    Loetz GmbH&Co - initial API and implementation
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+featureName=fork.jpos
+
+################ blurb property ####################################
+featureText=\
+Copyright (c) 2012-2016 - Loetz GmbH&Co.KG \n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+Contributors:\n\
+    Loetz GmbH&Co - implementation\n
+\n\
+The included JavaPOS code is licensed as follows:\n\
+* This software is provided "AS IS".  The JavaPOS working group (including\n\
+* each of the Corporate members, contributors and individuals)  MAKES NO\n\
+* REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,\n\
+* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED\n\
+* WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n\
+* NON-INFRINGEMENT. The JavaPOS working group shall not be liable for\n\
+* any damages suffered as a result of using, modifying or distributing this\n\
+* software or its derivatives.Permission to use, copy, modify, and distribute\n\
+* the software and its documentation for any purpose is hereby granted.\n\
+\n	
+################ end of blurb property ####################################
diff --git a/org.eclipse.osbp.fork.jpos/about_files/LICENSE.txt b/org.eclipse.osbp.fork.jpos/about_files/LICENSE.txt
new file mode 100644
index 0000000..ea84b8a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/about_files/LICENSE.txt
@@ -0,0 +1,225 @@
+Common Public License (CPL) -- V1.0
+
+03 May 2005
+Updated 16 Apr 2009
+
+As of 25 Feb 2009, IBM has assigned the Agreement Steward role for the
+CPL to the Eclipse Foundation. Eclipse has designated the Eclipse Public
+License (EPL) as the follow-on version of the CPL.
+
+
+Eclipse Foundation CPL
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF
+THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+ 1. DEFINITIONS
+    "Contribution" means:
+
+    a. in the case of the initial Contributor, the initial code and
+    documentation distributed under this Agreement, and
+    b. in the case of each subsequent Contributor:
+    i. changes to the Program, and
+    ii. additions to the Program;
+    where such changes and/or additions to the Program originate from
+    and are distributed by that particular Contributor. A Contribution
+    'originates' from a Contributor if it was added to the Program by
+    such Contributor itself or anyone acting on such Contributor's
+    behalf. Contributions do not include additions to the Program which:
+    (i) are separate modules of software distributed in conjunction with
+    the Program under their own license agreement, and (ii) are not
+    derivative works of the Program.
+    "Contributor" means any person or entity that distributes the Program.
+    "Licensed Patents " mean patent claims licensable by a Contributor
+    which are necessarily infringed by the use or sale of its
+    Contribution alone or when combined with the Program.
+    "Program" means the Contributions distributed in accordance with
+    this Agreement.
+    "Recipient" means anyone who receives the Program under this
+    Agreement, including all Contributors.
+ 
+ 2. GRANT OF RIGHTS
+    a. Subject to the terms of this Agreement, each Contributor hereby
+    grants Recipient a non-exclusive, worldwide, royalty-free copyright
+    license to reproduce, prepare derivative works of, publicly display,
+    publicly perform, distribute and sublicense the Contribution of such
+    Contributor, if any, and such derivative works, in source code and
+    object code form.
+
+    b. Subject to the terms of this Agreement, each Contributor hereby
+    grants Recipient a non-exclusive, worldwide, royalty-free patent
+    license under Licensed Patents to make, use, sell, offer to sell,
+    import and otherwise transfer the Contribution of such Contributor,
+    if any, in source code and object code form. This patent license
+    shall apply to the combination of the Contribution and the Program
+    if, at the time the Contribution is added by the Contributor, such
+    addition of the Contribution causes such combination to be covered
+    by the Licensed Patents. The patent license shall not apply to any
+    other combinations which include the Contribution. No hardware per
+    se is licensed hereunder.
+
+    c. Recipient understands that although each Contributor grants the
+    licenses to its Contributions set forth herein, no assurances are
+    provided by any Contributor that the Program does not infringe the
+    patent or other intellectual property rights of any other entity.
+    Each Contributor disclaims any liability to Recipient for claims
+    brought by any other entity based on infringement of intellectual
+    property rights or otherwise. As a condition to exercising the
+    rights and licenses granted hereunder, each Recipient hereby assumes
+    sole responsibility to secure any other intellectual property rights
+    needed, if any. For example, if a third party patent license is
+    required to allow Recipient to distribute the Program, it is
+    Recipient's responsibility to acquire that license before
+    distributing the Program.
+
+    d. Each Contributor represents that to its knowledge it has
+    sufficient copyright rights in its Contribution, if any, to grant
+    the copyright license set forth in this Agreement.
+ 
+ 3. REQUIREMENTS
+    A Contributor may choose to distribute the Program in object code
+    form under its own license agreement, provided that:
+
+    a. it complies with the terms and conditions of this Agreement; and
+    b. its license agreement:
+    i. effectively disclaims on behalf of all Contributors all
+    warranties and conditions, express and implied, including warranties
+    or conditions of title and non-infringement, and implied warranties
+    or conditions of merchantability and fitness for a particular purpose;
+    ii. effectively excludes on behalf of all Contributors all liability
+    for damages, including direct, indirect, special, incidental and
+    consequential damages, such as lost profits;
+    iii. states that any provisions which differ from this Agreement are
+    offered by that Contributor alone and not by any other party; and
+    iv. states that source code for the Program is available from such
+    Contributor, and informs licensees how to obtain it in a reasonable
+    manner on or through a medium customarily used for software exchange.
+
+    When the Program is made available in source code form:
+
+    a. it must be made available under this Agreement; and
+    b. a copy of this Agreement must be included with each copy of the
+    Program.
+
+    Contributors may not remove or alter any copyright notices contained
+    within the Program.
+
+    Each Contributor must identify itself as the originator of its
+    Contribution, if any, in a manner that reasonably allows subsequent
+    Recipients to identify the originator of the Contribution.
+ 
+ 4. COMMERCIAL DISTRIBUTION
+    Commercial distributors of software may accept certain
+    responsibilities with respect to end users, business partners and
+    the like. While this license is intended to facilitate the
+    commercial use of the Program, the Contributor who includes the
+    Program in a commercial product offering should do so in a manner
+    which does not create potential liability for other Contributors.
+    Therefore, if a Contributor includes the Program in a commercial
+    product offering, such Contributor ("Commercial Contributor") hereby
+    agrees to defend and indemnify every other Contributor ("Indemnified
+    Contributor") against any losses, damages and costs (collectively
+    "Losses") arising from claims, lawsuits and other legal actions
+    brought by a third party against the Indemnified Contributor to the
+    extent caused by the acts or omissions of such Commercial
+    Contributor in connection with its distribution of the Program in a
+    commercial product offering. The obligations in this section do not
+    apply to any claims or Losses relating to any actual or alleged
+    intellectual property infringement. In order to qualify, an
+    Indemnified Contributor must: a) promptly notify the Commercial
+    Contributor in writing of such claim, and b) allow the Commercial
+    Contributor to control, and cooperate with the Commercial
+    Contributor in, the defense and any related settlement negotiations.
+    The Indemnified Contributor may participate in any such claim at its
+    own expense.
+
+    For example, a Contributor might include the Program in a commercial
+    product offering, Product X. That Contributor is then a Commercial
+    Contributor. If that Commercial Contributor then makes performance
+    claims, or offers warranties related to Product X, those performance
+    claims and warranties are such Commercial Contributor's
+    responsibility alone. Under this section, the Commercial Contributor
+    would have to defend claims against the other Contributors related
+    to those performance claims and warranties, and if a court requires
+    any other Contributor to pay any damages as a result, the Commercial
+    Contributor must pay those damages.
+ 
+ 5. NO WARRANTY
+    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+    PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+    ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+    ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient
+    is solely responsible for determining the appropriateness of using
+    and distributing the Program and assumes all risks associated with
+    its exercise of rights under this Agreement, including but not
+    limited to the risks and costs of program errors, compliance with
+    applicable laws, damage to or loss of data, programs or equipment,
+    and unavailability or interruption of operations.
+ 
+ 6. DISCLAIMER OF LIABILITY
+    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+    NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT,
+    INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING WITHOUT LIMITATION LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+    GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ 
+ 7. GENERAL
+    If any provision of this Agreement is invalid or unenforceable under
+    applicable law, it shall not affect the validity or enforceability
+    of the remainder of the terms of this Agreement, and without further
+    action by the parties hereto, such provision shall be reformed to
+    the minimum extent necessary to make such provision valid and
+    enforceable.
+
+    If Recipient institutes patent litigation against a Contributor with
+    respect to a patent applicable to software (including a cross-claim
+    or counterclaim in a lawsuit), then any patent licenses granted by
+    that Contributor to such Recipient under this Agreement shall
+    terminate as of the date such litigation is filed. In addition, if
+    Recipient institutes patent litigation against any entity (including
+    a cross-claim or counterclaim in a lawsuit) alleging that the
+    Program itself (excluding combinations of the Program with other
+    software or hardware) infringes such Recipient's patent(s), then
+    such Recipient's rights granted under Section 2(b) shall terminate
+    as of the date such litigation is filed.
+
+    All Recipient's rights under this Agreement shall terminate if it
+    fails to comply with any of the material terms or conditions of this
+    Agreement and does not cure such failure in a reasonable period of
+    time after becoming aware of such noncompliance. If all Recipient's
+    rights under this Agreement terminate, Recipient agrees to cease use
+    and distribution of the Program as soon as reasonably practicable.
+    However, Recipient's obligations under this Agreement and any
+    licenses granted by Recipient relating to the Program shall continue
+    and survive.
+
+    Everyone is permitted to copy and distribute copies of this
+    Agreement, but in order to avoid inconsistency the Agreement is
+    copyrighted and may only be modified in the following manner. The
+    Agreement Steward reserves the right to publish new versions
+    (including revisions) of this Agreement from time to time. No one
+    other than the Agreement Steward has the right to modify this
+    Agreement. IBM is the initial Agreement Steward. IBM may assign the
+    responsibility to serve as the Agreement Steward to a suitable
+    separate entity. Each new version of the Agreement will be given a
+    distinguishing version number. The Program (including Contributions)
+    may always be distributed subject to the version of the Agreement
+    under which it was received. In addition, after a new version of the
+    Agreement is published, Contributor may elect to distribute the
+    Program (including its Contributions) under the new version. Except
+    as expressly stated in Sections 2(a) and 2(b) above, Recipient
+    receives no rights or licenses to the intellectual property of any
+    Contributor under this Agreement, whether expressly, by implication,
+    estoppel or otherwise. All rights in the Program not expressly
+    granted under this Agreement are reserved.
+
+    This Agreement is governed by the laws of the State of New York and
+    the intellectual property laws of the United States of America. No
+    party to this Agreement will bring a legal action under this
+    Agreement more than one year after the cause of action arose. Each
+    party waives its rights to a jury trial in any resulting litigation.
diff --git a/org.eclipse.osbp.fork.jpos/build.properties b/org.eclipse.osbp.fork.jpos/build.properties
new file mode 100644
index 0000000..3b37cfb
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/build.properties
@@ -0,0 +1,26 @@
+output.. = target/classes/
+bin.includes = META-INF/,\
+               .,\
+               OSGI-INF/,\
+               .classpath,\
+               .project,\
+               .settings/,\
+               about.html,\
+               about.ini,\
+               about.mappings,\
+               about.properties,\
+			   about_files/,\
+               notice.html,\
+               license.html,\
+               LICENSE.txt,\
+               epl-v20.html
+src.includes = license.html,\
+               LICENSE.txt,\
+               about.html,\
+               about.ini,\
+               about.mappings,\
+               about.properties,\
+			   about_files/,\
+               notice.html,\
+               epl-v20.html			   
+source.. = src/
diff --git a/org.eclipse.osbp.fork.jpos/epl-v20.html b/org.eclipse.osbp.fork.jpos/epl-v20.html
new file mode 100644
index 0000000..637a181
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/epl-v20.html
@@ -0,0 +1,300 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>Eclipse Public License - Version 2.0</title>
+    <style type="text/css">
+      body {
+        margin: 1.5em 3em;
+      }
+      h1{
+        font-size:1.5em;
+      }
+      h2{
+        font-size:1em;
+        margin-bottom:0.5em;
+        margin-top:1em;
+      }
+      p {
+        margin-top:  0.5em;
+        margin-bottom: 0.5em;
+      }
+      ul, ol{
+        list-style-type:none;
+      }
+    </style>
+  </head>
+  <body>
+    <h1>Eclipse Public License - v 2.0</h1>
+    <p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+      PUBLIC LICENSE (&ldquo;AGREEMENT&rdquo;). ANY USE, REPRODUCTION OR DISTRIBUTION
+      OF THE PROGRAM CONSTITUTES RECIPIENT&#039;S ACCEPTANCE OF THIS AGREEMENT.
+    </p>
+    <h2 id="definitions">1. DEFINITIONS</h2>
+    <p>&ldquo;Contribution&rdquo; means:</p>
+    <ul>
+      <li>a) in the case of the initial Contributor, the initial content
+        Distributed under this Agreement, and
+      </li>
+      <li>
+        b) in the case of each subsequent Contributor:
+        <ul>
+          <li>i) changes to the Program, and</li>
+          <li>ii) additions to the Program;</li>
+        </ul>
+        where such changes and/or additions to the Program originate from
+        and are Distributed by that particular Contributor. A Contribution
+        &ldquo;originates&rdquo; from a Contributor if it was added to the Program by such
+        Contributor itself or anyone acting on such Contributor&#039;s behalf.
+        Contributions do not include changes or additions to the Program that
+        are not Modified Works.
+      </li>
+    </ul>
+    <p>&ldquo;Contributor&rdquo; means any person or entity that Distributes the Program.</p>
+    <p>&ldquo;Licensed Patents&rdquo; mean patent claims licensable by a Contributor which
+      are necessarily infringed by the use or sale of its Contribution alone
+      or when combined with the Program.
+    </p>
+    <p>&ldquo;Program&rdquo; means the Contributions Distributed in accordance with this
+      Agreement.
+    </p>
+    <p>&ldquo;Recipient&rdquo; means anyone who receives the Program under this Agreement
+      or any Secondary License (as applicable), including Contributors.
+    </p>
+    <p>&ldquo;Derivative Works&rdquo; shall mean any work, whether in Source Code or other
+      form, that is based on (or derived from) the Program and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship.
+    </p>
+    <p>&ldquo;Modified Works&rdquo; shall mean any work in Source Code or other form that
+      results from an addition to, deletion from, or modification of the
+      contents of the Program, including, for purposes of clarity any new file
+      in Source Code form that contains any contents of the Program. Modified
+      Works shall not include works that contain only declarations, interfaces,
+      types, classes, structures, or files of the Program solely in each case
+      in order to link to, bind by name, or subclass the Program or Modified
+      Works thereof.
+    </p>
+    <p>&ldquo;Distribute&rdquo; means the acts of a) distributing or b) making available
+      in any manner that enables the transfer of a copy.
+    </p>
+    <p>&ldquo;Source Code&rdquo; means the form of a Program preferred for making
+      modifications, including but not limited to software source code,
+      documentation source, and configuration files.
+    </p>
+    <p>&ldquo;Secondary License&rdquo; means either the GNU General Public License,
+      Version 2.0, or any later versions of that license, including any
+      exceptions or additional permissions as identified by the initial
+      Contributor.
+    </p>
+    <h2 id="grant-of-rights">2. GRANT OF RIGHTS</h2>
+    <ul>
+      <li>a) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free copyright
+        license to reproduce, prepare Derivative Works of, publicly display,
+        publicly perform, Distribute and sublicense the Contribution of such
+        Contributor, if any, and such Derivative Works.
+      </li>
+      <li>b) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free patent
+        license under Licensed Patents to make, use, sell, offer to sell,
+        import and otherwise transfer the Contribution of such Contributor,
+        if any, in Source Code or other form. This patent license shall
+        apply to the combination of the Contribution and the Program if,
+        at the time the Contribution is added by the Contributor, such
+        addition of the Contribution causes such combination to be covered
+        by the Licensed Patents. The patent license shall not apply to any
+        other combinations which include the Contribution. No hardware per
+        se is licensed hereunder.
+      </li>
+      <li>c) Recipient understands that although each Contributor grants the
+        licenses to its Contributions set forth herein, no assurances are
+        provided by any Contributor that the Program does not infringe the
+        patent or other intellectual property rights of any other entity.
+        Each Contributor disclaims any liability to Recipient for claims
+        brought by any other entity based on infringement of intellectual
+        property rights or otherwise. As a condition to exercising the rights
+        and licenses granted hereunder, each Recipient hereby assumes sole
+        responsibility to secure any other intellectual property rights needed,
+        if any. For example, if a third party patent license is required to
+        allow Recipient to Distribute the Program, it is Recipient&#039;s
+        responsibility to acquire that license before distributing the Program.
+      </li>
+      <li>d) Each Contributor represents that to its knowledge it has sufficient
+        copyright rights in its Contribution, if any, to grant the copyright
+        license set forth in this Agreement.
+      </li>
+      <li>e) Notwithstanding the terms of any Secondary License, no Contributor
+        makes additional grants to any Recipient (other than those set forth
+        in this Agreement) as a result of such Recipient&#039;s receipt of the
+        Program under the terms of a Secondary License (if permitted under
+        the terms of Section 3).
+      </li>
+    </ul>
+    <h2 id="requirements">3. REQUIREMENTS</h2>
+    <p>3.1 If a Contributor Distributes the Program in any form, then:</p>
+    <ul>
+      <li>a) the Program must also be made available as Source Code, in
+        accordance with section 3.2, and the Contributor must accompany
+        the Program with a statement that the Source Code for the Program
+        is available under this Agreement, and informs Recipients how to
+        obtain it in a reasonable manner on or through a medium customarily
+        used for software exchange; and
+      </li>
+      <li>
+        b) the Contributor may Distribute the Program under a license
+        different than this Agreement, provided that such license:
+        <ul>
+          <li>i) effectively disclaims on behalf of all other Contributors all
+            warranties and conditions, express and implied, including warranties
+            or conditions of title and non-infringement, and implied warranties
+            or conditions of merchantability and fitness for a particular purpose;
+          </li>
+          <li>ii) effectively excludes on behalf of all other Contributors all
+            liability for damages, including direct, indirect, special, incidental
+            and consequential damages, such as lost profits;
+          </li>
+          <li>iii) does not attempt to limit or alter the recipients&#039; rights in the
+            Source Code under section 3.2; and
+          </li>
+          <li>iv) requires any subsequent distribution of the Program by any party
+            to be under a license that satisfies the requirements of this section 3.
+          </li>
+        </ul>
+      </li>
+    </ul>
+    <p>3.2 When the Program is Distributed as Source Code:</p>
+    <ul>
+      <li>a) it must be made available under this Agreement, or if the Program (i)
+        is combined with other material in a separate file or files made available
+        under a Secondary License, and (ii) the initial Contributor attached to
+        the Source Code the notice described in Exhibit A of this Agreement,
+        then the Program may be made available under the terms of such
+        Secondary Licenses, and
+      </li>
+      <li>b) a copy of this Agreement must be included with each copy of the Program.</li>
+    </ul>
+    <p>3.3 Contributors may not remove or alter any copyright, patent, trademark,
+      attribution notices, disclaimers of warranty, or limitations of liability
+      (&lsquo;notices&rsquo;) contained within the Program from any copy of the Program which
+      they Distribute, provided that Contributors may add their own appropriate
+      notices.
+    </p>
+    <h2 id="commercial-distribution">4. COMMERCIAL DISTRIBUTION</h2>
+    <p>Commercial distributors of software may accept certain responsibilities
+      with respect to end users, business partners and the like. While this
+      license is intended to facilitate the commercial use of the Program, the
+      Contributor who includes the Program in a commercial product offering should
+      do so in a manner which does not create potential liability for other
+      Contributors. Therefore, if a Contributor includes the Program in a
+      commercial product offering, such Contributor (&ldquo;Commercial Contributor&rdquo;)
+      hereby agrees to defend and indemnify every other Contributor
+      (&ldquo;Indemnified Contributor&rdquo;) against any losses, damages and costs
+      (collectively &ldquo;Losses&rdquo;) arising from claims, lawsuits and other legal actions
+      brought by a third party against the Indemnified Contributor to the extent
+      caused by the acts or omissions of such Commercial Contributor in connection
+      with its distribution of the Program in a commercial product offering.
+      The obligations in this section do not apply to any claims or Losses relating
+      to any actual or alleged intellectual property infringement. In order to
+      qualify, an Indemnified Contributor must: a) promptly notify the
+      Commercial Contributor in writing of such claim, and b) allow the Commercial
+      Contributor to control, and cooperate with the Commercial Contributor in,
+      the defense and any related settlement negotiations. The Indemnified
+      Contributor may participate in any such claim at its own expense.
+    </p>
+    <p>For example, a Contributor might include the Program
+      in a commercial product offering, Product X. That Contributor is then a
+      Commercial Contributor. If that Commercial Contributor then makes performance
+      claims, or offers warranties related to Product X, those performance claims
+      and warranties are such Commercial Contributor&#039;s responsibility alone.
+      Under this section, the Commercial Contributor would have to defend claims
+      against the other Contributors related to those performance claims and
+      warranties, and if a court requires any other Contributor to pay any damages
+      as a result, the Commercial Contributor must pay those damages.
+    </p>
+    <h2 id="warranty">5. NO WARRANTY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN &ldquo;AS IS&rdquo; BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+      WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+      MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
+      solely responsible for determining the appropriateness of using and
+      distributing the Program and assumes all risks associated with its
+      exercise of rights under this Agreement, including but not limited to the
+      risks and costs of program errors, compliance with applicable laws, damage
+      to or loss of data, programs or equipment, and unavailability or
+      interruption of operations.
+    </p>
+    <h2 id="disclaimer">6. DISCLAIMER OF LIABILITY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY
+      LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+      OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+      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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+      GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+    </p>
+    <h2 id="general">7. GENERAL</h2>
+    <p>If any provision of this Agreement is invalid or unenforceable under
+      applicable law, it shall not affect the validity or enforceability of the
+      remainder of the terms of this Agreement, and without further action by the
+      parties hereto, such provision shall be reformed to the minimum extent
+      necessary to make such provision valid and enforceable.
+    </p>
+    <p>If Recipient institutes patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+      (excluding combinations of the Program with other software or hardware)
+      infringes such Recipient&#039;s patent(s), then such Recipient&#039;s rights granted
+      under Section 2(b) shall terminate as of the date such litigation is filed.
+    </p>
+    <p>All Recipient&#039;s rights under this Agreement shall terminate if it fails to
+      comply with any of the material terms or conditions of this Agreement and
+      does not cure such failure in a reasonable period of time after becoming
+      aware of such noncompliance. If all Recipient&#039;s rights under this Agreement
+      terminate, Recipient agrees to cease use and distribution of the Program
+      as soon as reasonably practicable. However, Recipient&#039;s obligations under
+      this Agreement and any licenses granted by Recipient relating to the
+      Program shall continue and survive.
+    </p>
+    <p>Everyone is permitted to copy and distribute copies of this Agreement,
+      but in order to avoid inconsistency the Agreement is copyrighted and may
+      only be modified in the following manner. The Agreement Steward reserves
+      the right to publish new versions (including revisions) of this Agreement
+      from time to time. No one other than the Agreement Steward has the right
+      to modify this Agreement. The Eclipse Foundation is the initial Agreement
+      Steward. The Eclipse Foundation may assign the responsibility to serve as
+      the Agreement Steward to a suitable separate entity. Each new version of
+      the Agreement will be given a distinguishing version number. The Program
+      (including Contributions) may always be Distributed subject to the version
+      of the Agreement under which it was received. In addition, after a new
+      version of the Agreement is published, Contributor may elect to Distribute
+      the Program (including its Contributions) under the new version.
+    </p>
+    <p>Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+      receives no rights or licenses to the intellectual property of any
+      Contributor under this Agreement, whether expressly, by implication,
+      estoppel or otherwise. All rights in the Program not expressly granted
+      under this Agreement are reserved. Nothing in this Agreement is intended
+      to be enforceable by any entity that is not a Contributor or Recipient.
+      No third-party beneficiary rights are created under this Agreement.
+    </p>
+    <h2 id="exhibit-a">Exhibit A &ndash; Form of Secondary Licenses Notice</h2>
+    <p>&ldquo;This Source Code may also be made available under the following 
+    	Secondary Licenses when the conditions for such availability set forth 
+    	in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+    	version(s), and exceptions or additional permissions here}.&rdquo;
+    </p>
+    <blockquote>
+      <p>Simply including a copy of this Agreement, including this Exhibit A
+        is not sufficient to license the Source Code under Secondary Licenses.
+      </p>
+      <p>If it is not possible or desirable to put the notice in a particular file,
+        then You may include the notice in a location (such as a LICENSE file in a
+        relevant directory) where a recipient would be likely to look for
+        such a notice.
+      </p>
+      <p>You may add additional accurate notices of copyright ownership.</p>
+    </blockquote>
+  </body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/license.html b/org.eclipse.osbp.fork.jpos/license.html
new file mode 100644
index 0000000..637a181
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/license.html
@@ -0,0 +1,300 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>Eclipse Public License - Version 2.0</title>
+    <style type="text/css">
+      body {
+        margin: 1.5em 3em;
+      }
+      h1{
+        font-size:1.5em;
+      }
+      h2{
+        font-size:1em;
+        margin-bottom:0.5em;
+        margin-top:1em;
+      }
+      p {
+        margin-top:  0.5em;
+        margin-bottom: 0.5em;
+      }
+      ul, ol{
+        list-style-type:none;
+      }
+    </style>
+  </head>
+  <body>
+    <h1>Eclipse Public License - v 2.0</h1>
+    <p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+      PUBLIC LICENSE (&ldquo;AGREEMENT&rdquo;). ANY USE, REPRODUCTION OR DISTRIBUTION
+      OF THE PROGRAM CONSTITUTES RECIPIENT&#039;S ACCEPTANCE OF THIS AGREEMENT.
+    </p>
+    <h2 id="definitions">1. DEFINITIONS</h2>
+    <p>&ldquo;Contribution&rdquo; means:</p>
+    <ul>
+      <li>a) in the case of the initial Contributor, the initial content
+        Distributed under this Agreement, and
+      </li>
+      <li>
+        b) in the case of each subsequent Contributor:
+        <ul>
+          <li>i) changes to the Program, and</li>
+          <li>ii) additions to the Program;</li>
+        </ul>
+        where such changes and/or additions to the Program originate from
+        and are Distributed by that particular Contributor. A Contribution
+        &ldquo;originates&rdquo; from a Contributor if it was added to the Program by such
+        Contributor itself or anyone acting on such Contributor&#039;s behalf.
+        Contributions do not include changes or additions to the Program that
+        are not Modified Works.
+      </li>
+    </ul>
+    <p>&ldquo;Contributor&rdquo; means any person or entity that Distributes the Program.</p>
+    <p>&ldquo;Licensed Patents&rdquo; mean patent claims licensable by a Contributor which
+      are necessarily infringed by the use or sale of its Contribution alone
+      or when combined with the Program.
+    </p>
+    <p>&ldquo;Program&rdquo; means the Contributions Distributed in accordance with this
+      Agreement.
+    </p>
+    <p>&ldquo;Recipient&rdquo; means anyone who receives the Program under this Agreement
+      or any Secondary License (as applicable), including Contributors.
+    </p>
+    <p>&ldquo;Derivative Works&rdquo; shall mean any work, whether in Source Code or other
+      form, that is based on (or derived from) the Program and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship.
+    </p>
+    <p>&ldquo;Modified Works&rdquo; shall mean any work in Source Code or other form that
+      results from an addition to, deletion from, or modification of the
+      contents of the Program, including, for purposes of clarity any new file
+      in Source Code form that contains any contents of the Program. Modified
+      Works shall not include works that contain only declarations, interfaces,
+      types, classes, structures, or files of the Program solely in each case
+      in order to link to, bind by name, or subclass the Program or Modified
+      Works thereof.
+    </p>
+    <p>&ldquo;Distribute&rdquo; means the acts of a) distributing or b) making available
+      in any manner that enables the transfer of a copy.
+    </p>
+    <p>&ldquo;Source Code&rdquo; means the form of a Program preferred for making
+      modifications, including but not limited to software source code,
+      documentation source, and configuration files.
+    </p>
+    <p>&ldquo;Secondary License&rdquo; means either the GNU General Public License,
+      Version 2.0, or any later versions of that license, including any
+      exceptions or additional permissions as identified by the initial
+      Contributor.
+    </p>
+    <h2 id="grant-of-rights">2. GRANT OF RIGHTS</h2>
+    <ul>
+      <li>a) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free copyright
+        license to reproduce, prepare Derivative Works of, publicly display,
+        publicly perform, Distribute and sublicense the Contribution of such
+        Contributor, if any, and such Derivative Works.
+      </li>
+      <li>b) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free patent
+        license under Licensed Patents to make, use, sell, offer to sell,
+        import and otherwise transfer the Contribution of such Contributor,
+        if any, in Source Code or other form. This patent license shall
+        apply to the combination of the Contribution and the Program if,
+        at the time the Contribution is added by the Contributor, such
+        addition of the Contribution causes such combination to be covered
+        by the Licensed Patents. The patent license shall not apply to any
+        other combinations which include the Contribution. No hardware per
+        se is licensed hereunder.
+      </li>
+      <li>c) Recipient understands that although each Contributor grants the
+        licenses to its Contributions set forth herein, no assurances are
+        provided by any Contributor that the Program does not infringe the
+        patent or other intellectual property rights of any other entity.
+        Each Contributor disclaims any liability to Recipient for claims
+        brought by any other entity based on infringement of intellectual
+        property rights or otherwise. As a condition to exercising the rights
+        and licenses granted hereunder, each Recipient hereby assumes sole
+        responsibility to secure any other intellectual property rights needed,
+        if any. For example, if a third party patent license is required to
+        allow Recipient to Distribute the Program, it is Recipient&#039;s
+        responsibility to acquire that license before distributing the Program.
+      </li>
+      <li>d) Each Contributor represents that to its knowledge it has sufficient
+        copyright rights in its Contribution, if any, to grant the copyright
+        license set forth in this Agreement.
+      </li>
+      <li>e) Notwithstanding the terms of any Secondary License, no Contributor
+        makes additional grants to any Recipient (other than those set forth
+        in this Agreement) as a result of such Recipient&#039;s receipt of the
+        Program under the terms of a Secondary License (if permitted under
+        the terms of Section 3).
+      </li>
+    </ul>
+    <h2 id="requirements">3. REQUIREMENTS</h2>
+    <p>3.1 If a Contributor Distributes the Program in any form, then:</p>
+    <ul>
+      <li>a) the Program must also be made available as Source Code, in
+        accordance with section 3.2, and the Contributor must accompany
+        the Program with a statement that the Source Code for the Program
+        is available under this Agreement, and informs Recipients how to
+        obtain it in a reasonable manner on or through a medium customarily
+        used for software exchange; and
+      </li>
+      <li>
+        b) the Contributor may Distribute the Program under a license
+        different than this Agreement, provided that such license:
+        <ul>
+          <li>i) effectively disclaims on behalf of all other Contributors all
+            warranties and conditions, express and implied, including warranties
+            or conditions of title and non-infringement, and implied warranties
+            or conditions of merchantability and fitness for a particular purpose;
+          </li>
+          <li>ii) effectively excludes on behalf of all other Contributors all
+            liability for damages, including direct, indirect, special, incidental
+            and consequential damages, such as lost profits;
+          </li>
+          <li>iii) does not attempt to limit or alter the recipients&#039; rights in the
+            Source Code under section 3.2; and
+          </li>
+          <li>iv) requires any subsequent distribution of the Program by any party
+            to be under a license that satisfies the requirements of this section 3.
+          </li>
+        </ul>
+      </li>
+    </ul>
+    <p>3.2 When the Program is Distributed as Source Code:</p>
+    <ul>
+      <li>a) it must be made available under this Agreement, or if the Program (i)
+        is combined with other material in a separate file or files made available
+        under a Secondary License, and (ii) the initial Contributor attached to
+        the Source Code the notice described in Exhibit A of this Agreement,
+        then the Program may be made available under the terms of such
+        Secondary Licenses, and
+      </li>
+      <li>b) a copy of this Agreement must be included with each copy of the Program.</li>
+    </ul>
+    <p>3.3 Contributors may not remove or alter any copyright, patent, trademark,
+      attribution notices, disclaimers of warranty, or limitations of liability
+      (&lsquo;notices&rsquo;) contained within the Program from any copy of the Program which
+      they Distribute, provided that Contributors may add their own appropriate
+      notices.
+    </p>
+    <h2 id="commercial-distribution">4. COMMERCIAL DISTRIBUTION</h2>
+    <p>Commercial distributors of software may accept certain responsibilities
+      with respect to end users, business partners and the like. While this
+      license is intended to facilitate the commercial use of the Program, the
+      Contributor who includes the Program in a commercial product offering should
+      do so in a manner which does not create potential liability for other
+      Contributors. Therefore, if a Contributor includes the Program in a
+      commercial product offering, such Contributor (&ldquo;Commercial Contributor&rdquo;)
+      hereby agrees to defend and indemnify every other Contributor
+      (&ldquo;Indemnified Contributor&rdquo;) against any losses, damages and costs
+      (collectively &ldquo;Losses&rdquo;) arising from claims, lawsuits and other legal actions
+      brought by a third party against the Indemnified Contributor to the extent
+      caused by the acts or omissions of such Commercial Contributor in connection
+      with its distribution of the Program in a commercial product offering.
+      The obligations in this section do not apply to any claims or Losses relating
+      to any actual or alleged intellectual property infringement. In order to
+      qualify, an Indemnified Contributor must: a) promptly notify the
+      Commercial Contributor in writing of such claim, and b) allow the Commercial
+      Contributor to control, and cooperate with the Commercial Contributor in,
+      the defense and any related settlement negotiations. The Indemnified
+      Contributor may participate in any such claim at its own expense.
+    </p>
+    <p>For example, a Contributor might include the Program
+      in a commercial product offering, Product X. That Contributor is then a
+      Commercial Contributor. If that Commercial Contributor then makes performance
+      claims, or offers warranties related to Product X, those performance claims
+      and warranties are such Commercial Contributor&#039;s responsibility alone.
+      Under this section, the Commercial Contributor would have to defend claims
+      against the other Contributors related to those performance claims and
+      warranties, and if a court requires any other Contributor to pay any damages
+      as a result, the Commercial Contributor must pay those damages.
+    </p>
+    <h2 id="warranty">5. NO WARRANTY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN &ldquo;AS IS&rdquo; BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+      WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+      MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
+      solely responsible for determining the appropriateness of using and
+      distributing the Program and assumes all risks associated with its
+      exercise of rights under this Agreement, including but not limited to the
+      risks and costs of program errors, compliance with applicable laws, damage
+      to or loss of data, programs or equipment, and unavailability or
+      interruption of operations.
+    </p>
+    <h2 id="disclaimer">6. DISCLAIMER OF LIABILITY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY
+      LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+      OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+      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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+      GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+    </p>
+    <h2 id="general">7. GENERAL</h2>
+    <p>If any provision of this Agreement is invalid or unenforceable under
+      applicable law, it shall not affect the validity or enforceability of the
+      remainder of the terms of this Agreement, and without further action by the
+      parties hereto, such provision shall be reformed to the minimum extent
+      necessary to make such provision valid and enforceable.
+    </p>
+    <p>If Recipient institutes patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+      (excluding combinations of the Program with other software or hardware)
+      infringes such Recipient&#039;s patent(s), then such Recipient&#039;s rights granted
+      under Section 2(b) shall terminate as of the date such litigation is filed.
+    </p>
+    <p>All Recipient&#039;s rights under this Agreement shall terminate if it fails to
+      comply with any of the material terms or conditions of this Agreement and
+      does not cure such failure in a reasonable period of time after becoming
+      aware of such noncompliance. If all Recipient&#039;s rights under this Agreement
+      terminate, Recipient agrees to cease use and distribution of the Program
+      as soon as reasonably practicable. However, Recipient&#039;s obligations under
+      this Agreement and any licenses granted by Recipient relating to the
+      Program shall continue and survive.
+    </p>
+    <p>Everyone is permitted to copy and distribute copies of this Agreement,
+      but in order to avoid inconsistency the Agreement is copyrighted and may
+      only be modified in the following manner. The Agreement Steward reserves
+      the right to publish new versions (including revisions) of this Agreement
+      from time to time. No one other than the Agreement Steward has the right
+      to modify this Agreement. The Eclipse Foundation is the initial Agreement
+      Steward. The Eclipse Foundation may assign the responsibility to serve as
+      the Agreement Steward to a suitable separate entity. Each new version of
+      the Agreement will be given a distinguishing version number. The Program
+      (including Contributions) may always be Distributed subject to the version
+      of the Agreement under which it was received. In addition, after a new
+      version of the Agreement is published, Contributor may elect to Distribute
+      the Program (including its Contributions) under the new version.
+    </p>
+    <p>Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+      receives no rights or licenses to the intellectual property of any
+      Contributor under this Agreement, whether expressly, by implication,
+      estoppel or otherwise. All rights in the Program not expressly granted
+      under this Agreement are reserved. Nothing in this Agreement is intended
+      to be enforceable by any entity that is not a Contributor or Recipient.
+      No third-party beneficiary rights are created under this Agreement.
+    </p>
+    <h2 id="exhibit-a">Exhibit A &ndash; Form of Secondary Licenses Notice</h2>
+    <p>&ldquo;This Source Code may also be made available under the following 
+    	Secondary Licenses when the conditions for such availability set forth 
+    	in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+    	version(s), and exceptions or additional permissions here}.&rdquo;
+    </p>
+    <blockquote>
+      <p>Simply including a copy of this Agreement, including this Exhibit A
+        is not sufficient to license the Source Code under Secondary Licenses.
+      </p>
+      <p>If it is not possible or desirable to put the notice in a particular file,
+        then You may include the notice in a location (such as a LICENSE file in a
+        relevant directory) where a recipient would be likely to look for
+        such a notice.
+      </p>
+      <p>You may add additional accurate notices of copyright ownership.</p>
+    </blockquote>
+  </body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/notice.html b/org.eclipse.osbp.fork.jpos/notice.html
new file mode 100644
index 0000000..81fca9d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/notice.html
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+	<h2>Eclipse Foundation Software User Agreement</h2>
+	<p>November 22, 2014</p>
+
+	<h3>Usage Of Content</h3>
+
+	<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION,
+		INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+		(COLLECTIVELY &quot;CONTENT&quot;). USE OF THE CONTENT IS GOVERNED BY
+		THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+		CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED
+		BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS
+		GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY
+		APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED
+		BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS
+		AGREEMENT AND THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE
+		AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT
+		USE THE CONTENT.</p>
+
+	<h3>Applicable Licenses</h3>
+
+	<p>
+		Unless otherwise indicated, all Content made available by the Eclipse
+		Foundation is provided to you under the terms and conditions of the
+		Eclipse Public License Version 2.0 (&quot;EPL&quot;). A copy of the
+		EPL is provided with this Content and is also available at <a
+			href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
+		For purposes of the EPL, &quot;Program&quot; will mean the Content.
+	</p>
+
+	<p>Content includes, but is not limited to, source code, object
+		code, documentation and other files maintained in the Eclipse
+		Foundation source code repository (&quot;Repository&quot;) in software
+		modules (&quot;Modules&quot;) and made available as downloadable
+		archives (&quot;Downloads&quot;).</p>
+
+	<ul>
+		<li>Content may be structured and packaged into modules to
+			facilitate delivering, extending, and upgrading the Content. Typical
+			modules may include plug-ins (&quot;Plug-ins&quot;), plug-in
+			fragments (&quot;Fragments&quot;), and features
+			(&quot;Features&quot;).</li>
+		<li>Each Plug-in or Fragment may be packaged as a sub-directory
+			or JAR (Java&trade; ARchive) in a directory named
+			&quot;plugins&quot;.</li>
+		<li>A Feature is a bundle of one or more Plug-ins and/or
+			Fragments and associated material. Each Feature may be packaged as a
+			sub-directory in a directory named &quot;features&quot;. Within a
+			Feature, files named &quot;feature.xml&quot; may contain a list of
+			the names and version numbers of the Plug-ins and/or Fragments
+			associated with that Feature.</li>
+		<li>Features may also include other Features (&quot;Included
+			Features&quot;). Within a Feature, files named
+			&quot;feature.xml&quot; may contain a list of the names and version
+			numbers of Included Features.</li>
+	</ul>
+
+	<p>The terms and conditions governing Plug-ins and Fragments should
+		be contained in files named &quot;about.html&quot;
+		(&quot;Abouts&quot;). The terms and conditions governing Features and
+		Included Features should be contained in files named
+		&quot;license.html&quot; (&quot;Feature Licenses&quot;). Abouts and
+		Feature Licenses may be located in any directory of a Download or
+		Module including, but not limited to the following locations:</p>
+
+	<ul>
+		<li>The top-level (root) directory</li>
+		<li>Plug-in and Fragment directories</li>
+		<li>Inside Plug-ins and Fragments packaged as JARs</li>
+		<li>Sub-directories of the directory named &quot;src&quot; of
+			certain Plug-ins</li>
+		<li>Feature directories</li>
+	</ul>
+
+	<p>Note: if a Feature made available by the Eclipse Foundation is
+		installed using the Provisioning Technology (as defined below), you
+		must agree to a license (&quot;Feature Update License&quot;) during
+		the installation process. If the Feature contains Included Features,
+		the Feature Update License should either provide you with the terms
+		and conditions governing the Included Features or inform you where you
+		can locate them. Feature Update Licenses may be found in the
+		&quot;license&quot; property of files named
+		&quot;feature.properties&quot; found within a Feature. Such Abouts,
+		Feature Licenses, and Feature Update Licenses contain the terms and
+		conditions (or references to such terms and conditions) that govern
+		your use of the associated Content in that directory.</p>
+
+	<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY
+		REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND
+		CONDITIONS. SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT
+		ARE NOT LIMITED TO):</p>
+
+	<ul>
+		<li>Eclipse Public License Version 1.0 (available at <a
+			href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>)
+		</li>
+		<li>Eclipse Distribution License Version 1.0 (available at <a
+			href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)
+		</li>
+		<li>Common Public License Version 1.0 (available at <a
+			href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)
+		</li>
+		<li>Apache Software License 1.1 (available at <a
+			href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)
+		</li>
+		<li>Apache Software License 2.0 (available at <a
+			href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)
+		</li>
+		<li>Mozilla Public License Version 1.1 (available at <a
+			href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)
+		</li>
+	</ul>
+
+	<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND
+		CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License,
+		or Feature Update License is provided, please contact the Eclipse
+		Foundation to determine what terms and conditions govern that
+		particular Content.</p>
+
+
+	<h3>Use of Provisioning Technology</h3>
+
+	<p>
+		The Eclipse Foundation makes available provisioning software, examples
+		of which include, but are not limited to, p2 and the Eclipse Update
+		Manager (&quot;Provisioning Technology&quot;) for the purpose of
+		allowing users to install software, documentation, information and/or
+		other materials (collectively &quot;Installable Software&quot;). This
+		capability is provided with the intent of allowing such users to
+		install, extend and update Eclipse-based products. Information about
+		packaging Installable Software is available at <a
+			href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+		(&quot;Specification&quot;).
+	</p>
+
+	<p>You may use Provisioning Technology to allow other parties to
+		install Installable Software. You shall be responsible for enabling
+		the applicable license agreements relating to the Installable Software
+		to be presented to, and accepted by, the users of the Provisioning
+		Technology in accordance with the Specification. By using Provisioning
+		Technology in such a manner and making it available in accordance with
+		the Specification, you further acknowledge your agreement to, and the
+		acquisition of all necessary rights to permit the following:</p>
+
+	<ol>
+		<li>A series of actions may occur (&quot;Provisioning
+			Process&quot;) in which a user may execute the Provisioning
+			Technology on a machine (&quot;Target Machine&quot;) with the intent
+			of installing, extending or updating the functionality of an
+			Eclipse-based product.</li>
+		<li>During the Provisioning Process, the Provisioning Technology
+			may cause third party Installable Software or a portion thereof to be
+			accessed and copied to the Target Machine.</li>
+		<li>Pursuant to the Specification, you will provide to the user
+			the terms and conditions that govern the use of the Installable
+			Software (&quot;Installable Software Agreement&quot;) and such
+			Installable Software Agreement shall be accessed from the Target
+			Machine in accordance with the Specification. Such Installable
+			Software Agreement must inform the user of the terms and conditions
+			that govern the Installable Software and must solicit acceptance by
+			the end user in the manner prescribed in such Installable Software
+			Agreement. Upon such indication of agreement by the user, the
+			provisioning Technology will complete installation of the Installable
+			Software.</li>
+	</ol>
+
+	<h3>Cryptography</h3>
+
+	<p>Content may contain encryption software. The country in which
+		you are currently may have restrictions on the import, possession, and
+		use, and/or re-export to another country, of encryption software.
+		BEFORE using any encryption software, please check the country's laws,
+		regulations and policies concerning the import, possession, or use,
+		and re-export of encryption software, to see if this is permitted.</p>
+
+	<p>
+		<small>Java and all Java-based trademarks are trademarks of
+			Oracle Corporation in the United States, other countries, or both.</small>
+	</p>
+</body>
+</html>
diff --git a/org.eclipse.osbp.fork.jpos/pom.xml b/org.eclipse.osbp.fork.jpos/pom.xml
new file mode 100644
index 0000000..2f8bd53
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/pom.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+#=======================================================================
+# Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany).
+# This program and the accompanying materials are made available under the 
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+# 
+# SPDX-License-Identifier: EPL-2.0
+# 
+# Contributors:
+# Loetz GmbH&Co.KG - initial API and implementation 
+#=======================================================================
+-->
+<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.osbp.fork.jpos</groupId>
+        <artifactId>org.eclipse.osbp.fork.jpos.aggregator</artifactId>
+	    <version>1.14.0-SNAPSHOT</version>
+        <relativePath>..</relativePath>
+    </parent>
+    
+
+    <artifactId>org.eclipse.osbp.fork.jpos</artifactId>
+    <packaging>eclipse-plugin</packaging>
+
+    <build>
+        <sourceDirectory>src</sourceDirectory>
+    </build>
+
+	</project>
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/Activator.java b/org.eclipse.osbp.fork.jpos/src/jpos/Activator.java
new file mode 100644
index 0000000..e1f4457
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/Activator.java
@@ -0,0 +1,40 @@
+package jpos;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class Activator implements BundleActivator {
+
+	private static BundleContext context;
+	private static final Logger LOGGER = LoggerFactory.getLogger("activator");
+
+	static BundleContext getContext() {
+		return context;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext
+	 * )
+	 */
+	public void start(BundleContext bundleContext) throws Exception {
+		Activator.context = bundleContext;
+		LOGGER.info(Activator.class.getCanonicalName() + ": started");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext bundleContext) throws Exception {
+		Activator.context = null;
+		LOGGER.info(Activator.class.getCanonicalName() + ": stopped");
+	}
+
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BaseControl.java b/org.eclipse.osbp.fork.jpos/src/jpos/BaseControl.java
new file mode 100644
index 0000000..b61d1d6
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BaseControl.java
@@ -0,0 +1,52 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BaseControl
+//
+//   Interface definining all capabilities, properties and methods
+//   that are common to all JavaPOS device controls.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface BaseControl
+{
+    // Properties
+    public String  getCheckHealthText() throws JposException;
+    public boolean getClaimed() throws JposException;
+    public String  getDeviceControlDescription();
+    public int     getDeviceControlVersion();
+    public boolean getDeviceEnabled() throws JposException;
+    public void    setDeviceEnabled(boolean deviceEnabled)
+                       throws JposException;
+    public String  getDeviceServiceDescription() throws JposException;
+    public int     getDeviceServiceVersion() throws JposException;
+    public boolean getFreezeEvents() throws JposException;
+    public void    setFreezeEvents(boolean freezeEvents) throws JposException;
+    public String  getPhysicalDeviceDescription() throws JposException;
+    public String  getPhysicalDeviceName() throws JposException;
+    public int     getState();
+
+    // Methods
+    public void    claim(int timeout) throws JposException;
+    public void    close() throws JposException;
+    public void    checkHealth(int level) throws JposException;
+    public void    directIO(int command, int[] data, Object object)
+                       throws JposException;
+    public void    open(String logicalDeviceName) throws JposException;
+    public void    release() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BaseJposControl.java b/org.eclipse.osbp.fork.jpos/src/jpos/BaseJposControl.java
new file mode 100644
index 0000000..c521260
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BaseJposControl.java
@@ -0,0 +1,623 @@
+//----------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BaseJposControl.java - Abstract base class for all JavaPOS Device Controls.
+//
+//-----------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public abstract class BaseJposControl
+ implements BaseControl
+{
+  //--------------------------------------------------------------------------
+  // Constants
+  //--------------------------------------------------------------------------
+
+  protected static final int deviceVersion12  = 1002000; // 1.2.0
+  protected static final int deviceVersion13  = 1003000; // 1.3.0
+  protected static final int deviceVersion14  = 1004000; // 1.4.0
+  protected static final int deviceVersion15  = 1005000; // 1.5.0
+  protected static final int deviceVersion16  = 1006000; // 1.6.0
+  protected static final int deviceVersion17  = 1007000; // 1.7.0
+  protected static final int deviceVersion18  = 1008000; // 1.8.0
+  protected static final int deviceVersion19  = 1009000; // 1.9.0
+  protected static final int deviceVersion110 = 1010000; // 1.10.0
+  protected static final int deviceVersion111 = 1011000; // 1.11.0
+  protected static final int deviceVersion112 = 1012000; // 1.12.0
+  protected static final int deviceVersion113 = 1013000; // 1.13.0
+  protected static final int deviceVersion114 = 1014000; // 1.14.0
+
+
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  // Instance Data Set in Derived Class
+  protected String                deviceControlDescription;
+  protected int                   deviceControlVersion;
+
+  // Instance Data Set in Base Class
+  protected JposServiceConnection serviceConnection;
+  protected int                   serviceVersion;
+  protected boolean               bOpen;
+  protected BaseService           service;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public BaseJposControl()
+  {
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //serviceConnection = null;
+    //serviceVersion = 0;
+    //bOpen = false;
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public String getCheckHealthText()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JposConst.JPOS_E_CLOSED, "Control not opened");
+    }
+
+    try
+    {
+      return service.getCheckHealthText();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JposConst.JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getClaimed()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JposConst.JPOS_E_CLOSED, "Control not opened");
+    }
+
+    try
+    {
+      return service.getClaimed();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JposConst.JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getDeviceControlDescription()
+  {
+    return deviceControlDescription;
+  }
+
+  public int getDeviceControlVersion()
+  {
+    return deviceControlVersion;
+  }
+
+  public boolean getDeviceEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JposConst.JPOS_E_CLOSED, "Control not opened");
+    }
+
+    try
+    {
+      return service.getDeviceEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JposConst.JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDeviceEnabled(boolean deviceEnabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JposConst.JPOS_E_CLOSED, "Control not opened");
+    }
+
+    try
+    {
+      service.setDeviceEnabled(deviceEnabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JposConst.JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getDeviceServiceDescription()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JposConst.JPOS_E_CLOSED, "Control not opened");
+    }
+
+    try
+    {
+      return service.getDeviceServiceDescription();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JposConst.JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDeviceServiceVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JposConst.JPOS_E_CLOSED, "Control not opened");
+    }
+
+    try
+    {
+      return service.getDeviceServiceVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JposConst.JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getFreezeEvents()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JposConst.JPOS_E_CLOSED, "Control not opened");
+    }
+
+    try
+    {
+      return service.getFreezeEvents();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JposConst.JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setFreezeEvents(boolean freezeEvents)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JposConst.JPOS_E_CLOSED, "Control not opened");
+    }
+
+    try
+    {
+      service.setFreezeEvents(freezeEvents);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JposConst.JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getPhysicalDeviceDescription()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JposConst.JPOS_E_CLOSED, "Control not opened");
+    }
+
+    try
+    {
+      return service.getPhysicalDeviceDescription();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JposConst.JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getPhysicalDeviceName()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JposConst.JPOS_E_CLOSED, "Control not opened");
+    }
+
+    try
+    {
+      return service.getPhysicalDeviceName();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JposConst.JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getState()
+  {
+    // Preset result to JposConst.JPOS_S_CLOSED
+    int nState = JposConst.JPOS_S_CLOSED;
+
+    // If control is opened, get state from Device Service
+    if(bOpen)
+    {
+      try
+      {
+        nState = service.getState();
+      }
+      catch(Exception e)
+      {
+      }
+    }
+
+    return nState;
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void claim(int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JposConst.JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service.claim(timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JposConst.JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public synchronized void close()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JposConst.JPOS_E_CLOSED, "Control not opened");
+    }
+    else
+    {
+      // Perform the operation
+      try
+      {
+        service.close();
+      }
+      catch(JposException je)
+      {
+        throw je;
+      }
+      catch(Exception e)
+      {
+        throw new JposException(JposConst.JPOS_E_FAILURE,
+                                "Unhandled exception from Device Service", e);
+      }
+
+      try
+      {
+        serviceConnection.disconnect();
+      }
+      catch(Exception e)
+      {
+          throw new JposException(JposConst.JPOS_E_NOSERVICE,
+                                  "Unable to free service connection",
+                                  e);
+      }
+      finally
+      {
+        setDeviceService(null, 0);
+        serviceConnection = null;
+        service = null;
+        serviceVersion = 0;
+        bOpen = false;
+      }
+    }
+  }
+
+  public void checkHealth(int level)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JposConst.JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service.checkHealth(level);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JposConst.JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void directIO(int command, int[] data, Object object)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JposConst.JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service.directIO(command, data, object);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JposConst.JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public synchronized void open(String logicalDeviceName)
+    throws JposException
+  {
+    // Make sure the control is not already open
+    if(bOpen)
+    {
+      throw new JposException(JposConst.JPOS_E_ILLEGAL, "Device Control already open");
+    }
+
+    // Use JCL to get a connection to the device service
+    try
+    {
+      serviceConnection = JposServiceLoader.findService(logicalDeviceName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JposConst.JPOS_E_NOEXIST,
+                              "Device profile not found", e);
+    }
+
+    try
+    {
+      serviceConnection.connect();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JposConst.JPOS_E_NOSERVICE,
+                              "Could not connect to service", e);
+    }
+
+    // Get an instance of the BaseService interface
+    try
+    {
+      service = (BaseService)serviceConnection.getService();
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JposConst.JPOS_E_NOSERVICE,
+                              "Could not get service instance", e);
+    }
+
+    // Now attempt to process the open command
+    JposException jposException = null;
+    boolean bRealOpenSucceeded = false;
+    try
+    {
+      // Create callback subclass and attach it to the device service
+      EventCallbacks callbacks = createEventCallbacks();
+      service.open(logicalDeviceName, callbacks);
+
+      // If we got this far, the real open call succeeded
+      bRealOpenSucceeded = true;
+
+      // If the open succeeds, remember the service instance and determine
+      // the actual service version
+      serviceVersion = service.getDeviceServiceVersion();
+      setDeviceService(service, serviceVersion);
+
+      // If everything worked to this point, the open has succeeded.
+      bOpen = true;
+    }
+    catch(JposException je)
+    {
+      jposException = je;
+    }
+    catch(Exception e)
+    {
+      jposException = new JposException(JposConst.JPOS_E_FAILURE,
+                                        "Unhandled exception from Device Service",
+                                        e);
+    }
+
+    // If the overall open failed, clean up then throw the specified exception
+    if(!bOpen)
+    {
+      // If the Device Service open call succeeded, close it
+      try
+      {
+        service.close();
+      }
+      catch(Exception e)
+      {
+        // Eat any exceptions - we're trying to clean up as best we can
+      }
+
+      // Attenpt to disconnect the service instance
+      try
+      {
+        serviceConnection.disconnect();
+      }
+      catch(Exception e)
+      {
+        // Eat any exceptions - we're trying to clean up as best we can
+      }
+
+      // Reset instance data to allow for another open attempt later
+      serviceConnection = null;
+      serviceVersion = 0;
+
+      // Now that we've cleaned up, throw the exception that caused all this
+      throw jposException;
+    }
+  }
+
+  public void release()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JposConst.JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service.release();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JposConst.JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  abstract protected EventCallbacks createEventCallbacks();
+
+  // Store the reference to the Device Service
+  abstract protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/Belt.java b/org.eclipse.osbp.fork.jpos/src/jpos/Belt.java
new file mode 100644
index 0000000..fde379c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/Belt.java
@@ -0,0 +1,1381 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// Belt.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class Belt
+  extends BaseJposControl
+  implements BeltControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected BeltService112 service112;
+  protected BeltService113 service113;
+  protected BeltService114 service114;
+  protected Vector directIOListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public Belt()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS Belt Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    directIOListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapAutoStopBackward()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapAutoStopBackward();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapAutoStopBackwardItemCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapAutoStopBackwardItemCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapAutoStopForward()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapAutoStopForward();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapAutoStopForwardItemCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapAutoStopForwardItemCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapLightBarrierBackward()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapLightBarrierBackward();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapLightBarrierForward()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapLightBarrierForward();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapMoveBackward()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapMoveBackward();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRealTimeData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapRealTimeData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSecurityFlapBackward()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapSecurityFlapBackward();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSecurityFlapForward()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapSecurityFlapForward();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapSpeedStepsBackward()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapSpeedStepsBackward();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapSpeedStepsForward()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapSpeedStepsForward();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public boolean getAutoStopBackward()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getAutoStopBackward();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAutoStopBackward(boolean autoStop)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setAutoStopBackward(autoStop);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getAutoStopBackwardDelayTime()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getAutoStopBackwardDelayTime();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAutoStopBackwardDelayTime(int delayTime)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setAutoStopBackwardDelayTime(delayTime);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getAutoStopBackwardItemCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getAutoStopBackwardItemCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getAutoStopForward()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getAutoStopForward();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAutoStopForward(boolean autoStop)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setAutoStopForward(autoStop);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getAutoStopForwardDelayTime()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getAutoStopForwardDelayTime();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAutoStopForwardDelayTime(int delayTime)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setAutoStopForwardDelayTime(delayTime);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getAutoStopForwardItemCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getAutoStopForwardItemCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getLightBarrierBackwardInterrupted()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getLightBarrierBackwardInterrupted();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getLightBarrierForwardInterrupted()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getLightBarrierForwardInterrupted();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getMotionStatus()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getMotionStatus();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getSecurityFlapBackwardOpened()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getSecurityFlapBackwardOpened();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getSecurityFlapForwardOpened()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getSecurityFlapForwardOpened();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void adjustItemCount(int direction, int count)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.adjustItemCount(direction, count);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void moveBackward(int speed)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.moveBackward(speed);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void moveForward(int speed)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.moveForward(speed);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetBelt()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.resetBelt();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetItemCount(int direction)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.resetItemCount(direction);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void stopBelt()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.stopBelt();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new BeltCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (BeltService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BeltService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (BeltService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BeltService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (BeltService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BeltService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class BeltCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)Belt.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(Belt.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(Belt.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/Belt.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/Belt.manifest.stub
new file mode 100644
index 0000000..2a22e8c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/Belt.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/Belt.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BeltBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/BeltBeanInfo.java
new file mode 100644
index 0000000..1a603fa
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BeltBeanInfo.java
@@ -0,0 +1,111 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// BeltBeanInfo.java - Bean information for the JavaPOS Belt
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class BeltBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.Belt.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.Belt.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapAutoStopBackward"),
+        makeProperty("CapAutoStopBackwardItemCount"),
+        makeProperty("CapAutoStopForward"),
+        makeProperty("CapAutoStopForwardItemCount"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapLightBarrierBackward"),
+        makeProperty("CapLightBarrierForward"),
+        makeProperty("CapMoveBackward"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapRealTimeData"),
+        makeProperty("CapSecurityFlapBackward"),
+        makeProperty("CapSecurityFlapForward"),
+        makeProperty("CapSpeedStepsBackward"),
+        makeProperty("CapSpeedStepsForward"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateFirmware"),
+        makeProperty("CapUpdateStatistics"),
+
+        // Properties
+        makeProperty("AutoStopBackward"),
+        makeProperty("AutoStopBackwardDelayTime"),
+        makeProperty("AutoStopBackwardItemCount"),
+        makeProperty("AutoStopForward"),
+        makeProperty("AutoStopForwardDelayTime"),
+        makeProperty("AutoStopForwardItemCount"),
+        makeProperty("LightBarrierBackwardInterrupted"),
+        makeProperty("LightBarrierForwardInterrupted"),
+        makeProperty("MotionStatus"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState"),
+        makeProperty("SecurityFlapBackwardOpened"),
+        makeProperty("SecurityFlapForwardOpened")
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.Belt.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("DirectIO"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BeltConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/BeltConst.java
new file mode 100644
index 0000000..a355ad2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BeltConst.java
@@ -0,0 +1,73 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BeltConst
+//
+//   Belt constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface BeltConst
+{
+  /////////////////////////////////////////////////////////////////////
+  // "MotionStatus" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int BELT_MT_FORWARD              = 1;
+  public static final int BELT_MT_BACKWARD             = 2;
+  public static final int BELT_MT_STOPPED              = 3;
+  public static final int BELT_MT_EMERGENCY            = 4;
+  public static final int BELT_MT_MOTOR_FAULT          = 5;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "adjustItemCount" Method: "Direction" Parameter Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int BELT_AIC_BACKWARD            = 1;
+  public static final int BELT_AIC_FORWARD             = 2;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "resetItemCount" Method: "Direction" Parameter Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int BELT_RIC_BACKWARD            = 1;
+  public static final int BELT_RIC_FORWARD             = 2;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "StatusUpdateEvent" Event: "Data" Parameter Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int BELT_SUE_AUTO_STOP                           = 11;
+  public static final int BELT_SUE_EMERGENCY_STOP                      = 12;
+  public static final int BELT_SUE_SAFETY_STOP                         = 13;
+  public static final int BELT_SUE_TIMEOUT_STOP                        = 14;
+  public static final int BELT_SUE_MOTOR_OVERHEATING                   = 15;
+  public static final int BELT_SUE_MOTOR_FUSE_DEFECT                   = 16;
+  public static final int BELT_SUE_LIGHT_BARRIER_BACKWARD_INTERRUPTED  = 17;
+  public static final int BELT_SUE_LIGHT_BARRIER_BACKWARD_OK           = 18;
+  public static final int BELT_SUE_LIGHT_BARRIER_FORWARD_INTERRUPTED   = 19;
+  public static final int BELT_SUE_LIGHT_BARRIER_FORWARD_OK            = 20;
+  public static final int BELT_SUE_SECURITY_FLAP_BACKWARD_OPENED       = 21;
+  public static final int BELT_SUE_SECURITY_FLAP_BACKWARD_CLOSED       = 22;
+  public static final int BELT_SUE_SECURITY_FLAP_FORWARD_OPENED        = 23;
+  public static final int BELT_SUE_SECURITY_FLAP_FORWARD_CLOSED        = 24;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BeltControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/BeltControl112.java
new file mode 100644
index 0000000..dc1e98c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BeltControl112.java
@@ -0,0 +1,105 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BeltControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Belt for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//   New device category.
+// 2010-Mar-16 JavaPOS Release 1.12.4                              BS
+//   Corrected return types of getCapSpeedStepsBackward() and
+//   getCapSpeedStepsForward(). Was boolean, but should have been
+//   int.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BeltControl112 extends BaseControl
+{
+  // Capabilities
+  public boolean getCapAutoStopBackward() throws JposException;
+  public boolean getCapAutoStopBackwardItemCount() throws JposException;
+  public boolean getCapAutoStopForward() throws JposException;
+  public boolean getCapAutoStopForwardItemCount() throws JposException;
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapLightBarrierBackward() throws JposException;
+  public boolean getCapLightBarrierForward() throws JposException;
+  public boolean getCapMoveBackward() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public boolean getCapRealTimeData() throws JposException;
+  public boolean getCapSecurityFlapBackward() throws JposException;
+  public boolean getCapSecurityFlapForward() throws JposException;
+  public int     getCapSpeedStepsBackward() throws JposException;
+  public int     getCapSpeedStepsForward() throws JposException;
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Properties
+  public boolean getAutoStopBackward() throws JposException;
+  public void    setAutoStopBackward(boolean autoStop) throws JposException;
+  public int     getAutoStopBackwardDelayTime() throws JposException;
+  public void    setAutoStopBackwardDelayTime(int delayTime) throws JposException;
+  public int     getAutoStopBackwardItemCount() throws JposException;
+  public boolean getAutoStopForward() throws JposException;
+  public void    setAutoStopForward(boolean autoStop) throws JposException;
+  public int     getAutoStopForwardDelayTime() throws JposException;
+  public void    setAutoStopForwardDelayTime(int delayTime) throws JposException;
+  public int     getAutoStopForwardItemCount() throws JposException;
+  public boolean getLightBarrierBackwardInterrupted() throws JposException;
+  public boolean getLightBarrierForwardInterrupted() throws JposException;
+  public int     getMotionStatus() throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+  public boolean getSecurityFlapBackwardOpened() throws JposException;
+  public boolean getSecurityFlapForwardOpened() throws JposException;
+
+  // Methods
+  public void    adjustItemCount(int direction,
+                                 int count)
+                     throws JposException;
+  public void    compareFirmwareVersion(String firmwareFileName,
+                                        int[] result)
+                     throws JposException;
+  public void    moveBackward(int speed)
+                     throws JposException;
+  public void    moveForward(int speed)
+                     throws JposException;
+  public void    resetBelt()
+                     throws JposException;
+  public void    resetItemCount(int direction)
+                     throws JposException;
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    stopBelt()
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+
+  // Event listener methods
+  public void    addDirectIOListener(DirectIOListener l);
+  public void    removeDirectIOListener(DirectIOListener l);
+  public void    addStatusUpdateListener(StatusUpdateListener l);
+  public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BeltControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/BeltControl113.java
new file mode 100644
index 0000000..307e56f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BeltControl113.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BeltControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Belt for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BeltControl113 extends BeltControl112
+{
+  // Nothing new added for release 1.13
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BeltControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/BeltControl114.java
new file mode 100644
index 0000000..61782c4
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BeltControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BeltControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Belt for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BeltControl114 extends BeltControl113
+{
+  // Nothing new added for release 1.14
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BillAcceptor.java b/org.eclipse.osbp.fork.jpos/src/jpos/BillAcceptor.java
new file mode 100644
index 0000000..3201707
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BillAcceptor.java
@@ -0,0 +1,1249 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BillAcceptor.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class BillAcceptor
+  extends BaseJposControl
+  implements BillAcceptorControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected BillAcceptorService111 service111;
+  protected BillAcceptorService112 service112;
+  protected BillAcceptorService113 service113;
+  protected BillAcceptorService114 service114;
+  protected Vector dataListeners;
+  protected Vector directIOListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public BillAcceptor()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS BillAcceptor Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    dataListeners = new Vector();
+    directIOListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapDiscrepancy()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapDiscrepancy();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapFullSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapFullSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapJamSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapJamSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapNearFullSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapNearFullSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapPauseDeposit()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapPauseDeposit();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRealTimeData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapRealTimeData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public String getCurrencyCode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCurrencyCode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setCurrencyCode(String currencyCode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.setCurrencyCode(currencyCode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDataCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getDataCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getDataEventEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getDataEventEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDataEventEnabled(boolean dataEventEnabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.setDataEventEnabled(dataEventEnabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDepositAmount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getDepositAmount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getDepositCashList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getDepositCashList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getDepositCodeList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getDepositCodeList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getDepositCounts()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getDepositCounts();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDepositStatus()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getDepositStatus();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getFullStatus()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getFullStatus();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getRealTimeDataEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getRealTimeDataEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setRealTimeDataEnabled(boolean bEnabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.setRealTimeDataEnabled(bEnabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void adjustCashCounts(String cashCounts)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.adjustCashCounts(cashCounts);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void beginDeposit()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.beginDeposit();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearInput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.clearInput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void endDeposit(int success)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.endDeposit(success);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void fixDeposit()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.fixDeposit();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void pauseDeposit(int control)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.pauseDeposit(control);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void readCashCounts(String[] cashCounts, boolean[] discrepancy)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.readCashCounts(cashCounts, discrepancy);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new BillAcceptorCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (BillAcceptorService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BillAcceptorService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (BillAcceptorService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BillAcceptorService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (BillAcceptorService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BillAcceptorService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (BillAcceptorService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BillAcceptorService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.addElement(l);
+    }
+  }
+
+  public void removeDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.removeElement(l);
+    }
+  }
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class BillAcceptorCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)BillAcceptor.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+      synchronized(BillAcceptor.this.dataListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < dataListeners.size(); x++)
+        {
+          ((DataListener)dataListeners.elementAt(x)).dataOccurred(e);
+        }
+      }
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(BillAcceptor.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(BillAcceptor.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BillAcceptor.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/BillAcceptor.manifest.stub
new file mode 100644
index 0000000..057fd12
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BillAcceptor.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/BillAcceptor.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BillAcceptorBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/BillAcceptorBeanInfo.java
new file mode 100644
index 0000000..742f495
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BillAcceptorBeanInfo.java
@@ -0,0 +1,106 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// BillAcceptorBeanInfo.java - Bean information for the JavaPOS BillAcceptor
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class BillAcceptorBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.BillAcceptor.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.BillAcceptor.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapDiscrepancy"),
+        makeProperty("CapFullSensor"),
+        makeProperty("CapJamSensor"),
+        makeProperty("CapNearFullSensor"),
+        makeProperty("CapPauseDeposit"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapRealTimeData"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateFirmware"),
+        makeProperty("CapUpdateStatistics"),
+
+        // Properties
+        makeProperty("CurrencyCode"),
+        makeProperty("DataCount"),
+        makeProperty("DataEventEnabled"),
+        makeProperty("DepositAmount"),
+        makeProperty("DepositCashList"),
+        makeProperty("DepositCodeList"),
+        makeProperty("DepositCounts"),
+        makeProperty("DepositStatus"),
+        makeProperty("FullStatus"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState"),
+        makeProperty("RealTimeDataEnabled"),
+
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.BillAcceptor.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("Data"),
+        makeEvent("DirectIO"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BillAcceptorConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/BillAcceptorConst.java
new file mode 100644
index 0000000..efb1252
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BillAcceptorConst.java
@@ -0,0 +1,70 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BillAcceptorConst
+//
+//   BillAcceptor constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface BillAcceptorConst
+{
+  //###################################################################
+  //#### BillAcceptor Constants
+  //###################################################################
+
+  /////////////////////////////////////////////////////////////////////
+  // "FullStatus" Property Constants
+  // "StatusUpdateEvent" Event Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int BACC_STATUS_OK               = 0;  // FullStatus
+
+  public static final int BACC_STATUS_FULL             = 21; // FullStatus, StatusUpdateEvent
+  public static final int BACC_STATUS_NEARFULL         = 22; // FullStatus, StatusUpdateEvent
+  public static final int BACC_STATUS_FULLOK           = 23; // StatusUpdateEvent
+
+  public static final int BACC_STATUS_JAM              = 31; // StatusUpdateEvent
+  public static final int BACC_STATUS_JAMOK            = 32; // StatusUpdateEvent
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "DepositStatus" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int BACC_STATUS_DEPOSIT_START    = 1;
+  public static final int BACC_STATUS_DEPOSIT_END      = 2;
+  public static final int BACC_STATUS_DEPOSIT_COUNT    = 4;
+  public static final int BACC_STATUS_DEPOSIT_JAM      = 5;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "EndDeposit" Method Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int BACC_DEPOSIT_COMPLETE        = 11;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "PauseDeposit" Method Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int BACC_DEPOSIT_PAUSE           = 11;
+  public static final int BACC_DEPOSIT_RESTART         = 12;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BillAcceptorControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/BillAcceptorControl111.java
new file mode 100644
index 0000000..787c917
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BillAcceptorControl111.java
@@ -0,0 +1,98 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BillAcceptorControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bill Acceptor for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BillAcceptorControl111 extends BaseControl
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapDiscrepancy() throws JposException;
+  public boolean getCapFullSensor() throws JposException;
+  public boolean getCapJamSensor() throws JposException;
+  public boolean getCapNearFullSensor() throws JposException;
+  public boolean getCapPauseDeposit() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public boolean getCapRealTimeData() throws JposException;
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Properties
+  public String  getCurrencyCode() throws JposException;
+  public void    setCurrencyCode(String currencyCode) throws JposException;
+  public int     getDataCount() throws JposException;
+  public boolean getDataEventEnabled() throws JposException;
+  public void    setDataEventEnabled(boolean dataEventEnabled)
+                     throws JposException;
+  public int     getDepositAmount() throws JposException;
+  public String  getDepositCashList() throws JposException;
+  public String  getDepositCodeList() throws JposException;
+  public String  getDepositCounts() throws JposException;
+  public int     getDepositStatus() throws JposException;
+  public int     getFullStatus() throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+  public boolean getRealTimeDataEnabled() throws JposException;
+  public void    setRealTimeDataEnabled(boolean bEnabled) throws JposException;
+
+  // Methods
+  public void    adjustCashCounts(String cashCounts)
+                     throws JposException;
+  public void    beginDeposit()
+                     throws JposException;
+  public void    clearInput()  throws JposException;
+  public void    compareFirmwareVersion(String firmwareFileName,
+                                        int[] result)
+                     throws JposException;
+  public void    endDeposit(int success)
+                     throws JposException;
+  public void    fixDeposit()
+                     throws JposException;
+  public void    pauseDeposit(int control)
+                     throws JposException;
+  public void    readCashCounts(String[] cashCounts,
+                                boolean[] discrepancy)
+                     throws JposException;
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+
+
+  // Event listener methods
+  public void    addDataListener(DataListener l);
+  public void    removeDataListener(DataListener l);
+  public void    addDirectIOListener(DirectIOListener l);
+  public void    removeDirectIOListener(DirectIOListener l);
+  public void    addStatusUpdateListener(StatusUpdateListener l);
+  public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BillAcceptorControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/BillAcceptorControl112.java
new file mode 100644
index 0000000..a85212e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BillAcceptorControl112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BillAcceptorControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bill Acceptor for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BillAcceptorControl112 extends BillAcceptorControl111
+{
+  // Nothing new added for release 1.12
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BillAcceptorControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/BillAcceptorControl113.java
new file mode 100644
index 0000000..8b4641a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BillAcceptorControl113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BillAcceptorControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bill Acceptor for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BillAcceptorControl113 extends BillAcceptorControl112
+{
+  // Nothing new added for release 1.13
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BillAcceptorControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/BillAcceptorControl114.java
new file mode 100644
index 0000000..4c65e1d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BillAcceptorControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BillAcceptorControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Bill Acceptor for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BillAcceptorControl114 extends BillAcceptorControl113
+{
+  // Nothing new added for release 1.14
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BillDispenser.java b/org.eclipse.osbp.fork.jpos/src/jpos/BillDispenser.java
new file mode 100644
index 0000000..a90e046
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BillDispenser.java
@@ -0,0 +1,1098 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BillDispenser.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class BillDispenser
+  extends BaseJposControl
+  implements BillDispenserControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected BillDispenserService111 service111;
+  protected BillDispenserService112 service112;
+  protected BillDispenserService113 service113;
+  protected BillDispenserService114 service114;
+  protected Vector directIOListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public BillDispenser()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS BillDispenser Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    directIOListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapDiscrepancy()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapDiscrepancy();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapEmptySensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapEmptySensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapJamSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapJamSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapNearEmptySensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapNearEmptySensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public boolean getAsyncMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getAsyncMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAsyncMode(boolean asyncMode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.setAsyncMode(asyncMode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getAsyncResultCode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getAsyncResultCode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getAsyncResultCodeExtended()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getAsyncResultCodeExtended();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getCurrencyCashList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCurrencyCashList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getCurrencyCode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCurrencyCode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setCurrencyCode(String currencyCode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.setCurrencyCode(currencyCode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getCurrencyCodeList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCurrencyCodeList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCurrentExit()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCurrentExit();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setCurrentExit(int currentExit)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.setCurrentExit(currentExit);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDeviceExits()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getDeviceExits();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDeviceStatus()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getDeviceStatus();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getExitCashList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getExitCashList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void adjustCashCounts(String cashCounts)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.adjustCashCounts(cashCounts);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearOutput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.clearOutput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void dispenseCash(String cashCounts)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.dispenseCash(cashCounts);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void readCashCounts(String[] cashCounts, boolean[] discrepancy)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.readCashCounts(cashCounts, discrepancy);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new BillDispenserCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (BillDispenserService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BillDispenserService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (BillDispenserService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BillDispenserService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (BillDispenserService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BillDispenserService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (BillDispenserService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BillDispenserService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class BillDispenserCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)BillDispenser.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(BillDispenser.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(BillDispenser.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BillDispenser.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/BillDispenser.manifest.stub
new file mode 100644
index 0000000..62c77e9
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BillDispenser.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/BillDispenser.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BillDispenserBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/BillDispenserBeanInfo.java
new file mode 100644
index 0000000..183ae7b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BillDispenserBeanInfo.java
@@ -0,0 +1,102 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// BillDispenserBeanInfo.java - Bean information for the JavaPOS BillDispenser
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class BillDispenserBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.BillDispenser.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.BillDispenser.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapDiscrepancy"),
+        makeProperty("CapEmptySensor"),
+        makeProperty("CapJamSensor"),
+        makeProperty("CapNearEmptySensor"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateFirmware"),
+        makeProperty("CapUpdateStatistics"),
+
+        // Properties
+        makeProperty("AsyncMode"),
+        makeProperty("AsyncResultCode"),
+        makeProperty("AsyncResultCodeExtended"),
+        makeProperty("CurrencyCashList"),
+        makeProperty("CurrencyCode"),
+        makeProperty("CurrencyCodeList"),
+        makeProperty("CurrentExit"),
+        makeProperty("DeviceExits"),
+        makeProperty("DeviceStatus"),
+        makeProperty("ExitCashList"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState")
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.BillDispenser.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("DirectIO"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BillDispenserConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/BillDispenserConst.java
new file mode 100644
index 0000000..a039b07
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BillDispenserConst.java
@@ -0,0 +1,54 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BillDispenserConst
+//
+//   BillDispenser constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface BillDispenserConst
+{
+  //###################################################################
+  //#### BillDispenser Constants
+  //###################################################################
+
+  /////////////////////////////////////////////////////////////////////
+  // "DeviceStatus" Property Constants
+  // "StatusUpdateEvent" Event Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int BDSP_STATUS_OK               = 0;  // DeviceStatus
+
+  public static final int BDSP_STATUS_EMPTY            = 11; // DeviceStatus, StatusUpdateEvent
+  public static final int BDSP_STATUS_NEAREMPTY        = 12; // DeviceStatus, StatusUpdateEvent
+  public static final int BDSP_STATUS_EMPTYOK          = 13; // StatusUpdateEvent
+
+  public static final int BDSP_STATUS_JAM              = 31; // DeviceStatus, StatusUpdateEvent
+  public static final int BDSP_STATUS_JAMOK            = 32; // StatusUpdateEvent
+
+  public static final int BDSP_STATUS_ASYNC            = 91; // StatusUpdateEvent
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "ResultCodeExtended" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int JPOS_EBDSP_OVERDISPENSE      = 201; // DispenseCash
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BillDispenserControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/BillDispenserControl111.java
new file mode 100644
index 0000000..51a2002
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BillDispenserControl111.java
@@ -0,0 +1,87 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BillDispenserControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bill Dispenser for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BillDispenserControl111 extends BaseControl
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapDiscrepancy() throws JposException;
+  public boolean getCapEmptySensor() throws JposException;
+  public boolean getCapJamSensor() throws JposException;
+  public boolean getCapNearEmptySensor() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Properties
+  public boolean getAsyncMode() throws JposException;
+  public void    setAsyncMode(boolean asyncMode) throws JposException;
+  public int     getAsyncResultCode() throws JposException;
+  public int     getAsyncResultCodeExtended() throws JposException;
+  public String  getCurrencyCashList() throws JposException;
+  public String  getCurrencyCode() throws JposException;
+  public void    setCurrencyCode(String currencyCode) throws JposException;
+  public String  getCurrencyCodeList() throws JposException;
+  public int     getCurrentExit() throws JposException;
+  public void    setCurrentExit(int currentExit) throws JposException;
+  public int     getDeviceExits() throws JposException;
+  public int     getDeviceStatus() throws JposException;
+  public String  getExitCashList() throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+
+
+  // Methods
+  public void    adjustCashCounts(String cashCounts)
+                     throws JposException;
+  public void    clearOutput()  throws JposException;
+  public void    compareFirmwareVersion(String firmwareFileName,
+                                        int[] result)
+                     throws JposException;
+  public void    dispenseCash(String cashCounts)
+                     throws JposException;
+  public void    readCashCounts(String[] cashCounts,
+                                boolean[] discrepancy)
+                     throws JposException;
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+
+  // Event listener methods
+  public void    addDirectIOListener(DirectIOListener l);
+  public void    removeDirectIOListener(DirectIOListener l);
+  public void    addStatusUpdateListener(StatusUpdateListener l);
+  public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BillDispenserControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/BillDispenserControl112.java
new file mode 100644
index 0000000..be67fe8
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BillDispenserControl112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BillDispenserControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bill Dispenser for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BillDispenserControl112 extends BillDispenserControl111
+{
+  // Nothing new added for release 1.12
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BillDispenserControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/BillDispenserControl113.java
new file mode 100644
index 0000000..1963048
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BillDispenserControl113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BillDispenserControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bill Dispenser for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BillDispenserControl113 extends BillDispenserControl112
+{
+  // Nothing new added for release 1.13
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BillDispenserControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/BillDispenserControl114.java
new file mode 100644
index 0000000..5d71e4c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BillDispenserControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BillDispenserControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Bill Dispenser for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BillDispenserControl114 extends BillDispenserControl113
+{
+  // Nothing new added for release 1.14
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/Biometrics.java b/org.eclipse.osbp.fork.jpos/src/jpos/Biometrics.java
new file mode 100644
index 0000000..181cd7e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/Biometrics.java
@@ -0,0 +1,1592 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// Biometrics.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class Biometrics
+  extends BaseJposControl
+  implements BiometricsControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected BiometricsService110 service110;
+  protected BiometricsService111 service111;
+  protected BiometricsService112 service112;
+  protected BiometricsService113 service113;
+  protected BiometricsService114 service114;
+  protected Vector dataListeners;
+  protected Vector directIOListeners;
+  protected Vector errorListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public Biometrics()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS Biometrics Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service110 = null;
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    dataListeners = new Vector();
+    directIOListeners = new Vector();
+    errorListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapPrematchData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapPrematchData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRawSensorData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapRawSensorData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRealTimeData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapRealTimeData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapSensorColor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapSensorColor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapSensorOrientation()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapSensorOrientation();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapSensorType()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapSensorType();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapTemplateAdaptation()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapTemplateAdaptation();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public int getAlgorithm()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getAlgorithm();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAlgorithm(int algorithm)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.setAlgorithm(algorithm);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getAlgorithmList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getAlgorithmList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getAutoDisable()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getAutoDisable();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAutoDisable(boolean autoDisable)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.setAutoDisable(autoDisable);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public byte[] getBIR()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getBIR();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDataCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getDataCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getDataEventEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getDataEventEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDataEventEnabled(boolean dataEventEnabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.setDataEventEnabled(dataEventEnabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public byte[] getRawSensorData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getRawSensorData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getRealTimeDataEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getRealTimeDataEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setRealTimeDataEnabled(boolean enabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.setRealTimeDataEnabled(enabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getSensorBPP()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getSensorBPP();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getSensorColor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getSensorColor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setSensorColor(int color)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.setSensorColor(color);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getSensorHeight()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getSensorHeight();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getSensorOrientation()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getSensorOrientation();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setSensorOrientation(int orientation)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.setSensorOrientation(orientation);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getSensorType()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getSensorType();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setSensorType(int type)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.setSensorType(type);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getSensorWidth()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getSensorWidth();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void beginEnrollCapture(byte[] referenceBIR, byte[] payload)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.beginEnrollCapture(referenceBIR, payload);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void beginVerifyCapture()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.beginVerifyCapture();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearInput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.clearInput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearInputProperties()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.clearInputProperties();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void endCapture()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.endCapture();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void identify(int maxFARRequested, int maxFRRRequested, boolean FARPrecedence, byte[][] referenceBIRPopulation, int[][] candidateRanking, int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.identify(maxFARRequested, maxFRRRequested, FARPrecedence, referenceBIRPopulation, candidateRanking, timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void identifyMatch(int maxFARRequested, int maxFRRRequested, boolean FARPrecedence, byte[] sampleBIR, byte[][] referenceBIRPopulation, int[][] candidateRanking)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.identifyMatch(maxFARRequested, maxFRRRequested, FARPrecedence, sampleBIR, referenceBIRPopulation, candidateRanking);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void processPrematchData(byte[] capturedBIR, byte[] prematchDataBIR, byte[][] processedBIR)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.processPrematchData(capturedBIR, prematchDataBIR, processedBIR);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void verify(int maxFARRequested, int maxFRRRequested, boolean FARPrecedence, byte[] referenceBIR, byte[][] adaptedBIR, boolean[] result, int[] FARAchieved, int[] FRRAchieved, byte[][] payload, int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.verify(maxFARRequested, maxFRRRequested, FARPrecedence, referenceBIR, adaptedBIR, result, FARAchieved, FRRAchieved, payload, timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void verifyMatch(int maxFARRequested, int maxFRRRequested, boolean FARPrecedence, byte[] sampleBIR, byte[] referenceBIR, byte[][] adaptedBIR, boolean[] result, int[] FARAchieved, int[] FRRAchieved, byte[][] payload)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.verifyMatch(maxFARRequested, maxFRRRequested, FARPrecedence, sampleBIR, referenceBIR, adaptedBIR, result, FARAchieved, FRRAchieved, payload);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new BiometricsCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service110 = null;
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion110)
+      {
+        try
+        {
+          service110 = (BiometricsService110)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BiometricsService110 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (BiometricsService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BiometricsService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (BiometricsService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BiometricsService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (BiometricsService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BiometricsService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (BiometricsService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BiometricsService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.addElement(l);
+    }
+  }
+
+  public void removeDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.removeElement(l);
+    }
+  }
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.addElement(l);
+    }
+  }
+
+  public void removeErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class BiometricsCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)Biometrics.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+      synchronized(Biometrics.this.dataListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < dataListeners.size(); x++)
+        {
+          ((DataListener)dataListeners.elementAt(x)).dataOccurred(e);
+        }
+      }
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(Biometrics.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+      synchronized(Biometrics.this.errorListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < errorListeners.size(); x++)
+        {
+          ((ErrorListener)errorListeners.elementAt(x)).errorOccurred(e);
+        }
+      }
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(Biometrics.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/Biometrics.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/Biometrics.manifest.stub
new file mode 100644
index 0000000..531a256
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/Biometrics.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/Biometrics.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BiometricsBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/BiometricsBeanInfo.java
new file mode 100644
index 0000000..7e07553
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BiometricsBeanInfo.java
@@ -0,0 +1,111 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// BiometricsBeanInfo.java - Bean information for the JavaPOS Biometrics
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class BiometricsBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.Biometrics.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.Biometrics.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapPrematchData"),
+        makeProperty("CapRawSensorData"),
+        makeProperty("CapRealTimeData"),
+        makeProperty("CapSensorColor"),
+        makeProperty("CapSensorOrientation"),
+        makeProperty("CapSensorType"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapTemplateAdaptation"),
+        makeProperty("CapUpdateFirmware"),
+        makeProperty("CapUpdateStatistics"),
+
+        // Properties
+        makeProperty("Algorithm"),
+        makeProperty("AlgorithmList"),
+        makeProperty("AutoDisable"),
+        makeProperty("BIR"),
+        makeProperty("DataCount"),
+        makeProperty("DataEventEnabled"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState"),
+        makeProperty("RawSensorData"),
+        makeProperty("RealTimeDataEnabled"),
+        makeProperty("SensorBPP"),
+        makeProperty("SensorColor"),
+        makeProperty("SensorHeight"),
+        makeProperty("SensorOrientation"),
+        makeProperty("SensorType"),
+        makeProperty("SensorWidth")
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.Biometrics.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("Data"),
+        makeEvent("DirectIO"),
+        makeEvent("Error"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BiometricsConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/BiometricsConst.java
new file mode 100644
index 0000000..480fe2b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BiometricsConst.java
@@ -0,0 +1,166 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BiometricsConst
+//
+//   Biometrics constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+// 2006-Aug-11 JavaPOS Release 1.10.2                              BS
+//   - Added missing constants:
+//       BIO_FAR_PRECEDENCE
+//       BIO_FRR_PRECEDENCE
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//   Added new StatusUpdateEvent constants:
+//       BIO_SUE_MOVE_SLOWER
+//       BIO_SUE_MOVE_FASTER
+//       BIO_SUE_SENSOR_DIRTY
+//   Fixed incorrect spelling of constants:
+//       BIO_CST_KEYSTROKE_DYNAMICS
+//       BIO_ST_KEYSTROKE_DYNAMICS
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//   Added new StatusUpdateEvent constant:
+//       BIO_SUE_FAILED_READ
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//   Added new StatusUpdateEvent constants:
+//       BIO_SUE_SENSOR_READY
+//       BIO_SUE_SENSOR_COMPLETE
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface BiometricsConst
+{
+  //###################################################################
+  //#### Biometrics Constants
+  //###################################################################
+
+  /////////////////////////////////////////////////////////////////////
+  // "CapSensorColor" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int BIO_CSC_MONO      = 0x00000001;
+  public static final int BIO_CSC_GRAYSCALE = 0x00000002;
+  public static final int BIO_CSC_16        = 0x00000004;
+  public static final int BIO_CSC_256       = 0x00000008;
+  public static final int BIO_CSC_FULL      = 0x00000010;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "CapSensorOrientation" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int BIO_CSO_NORMAL    = 0x00000001;
+  public static final int BIO_CSO_RIGHT     = 0x00000002;
+  public static final int BIO_CSO_INVERTED  = 0x00000004;
+  public static final int BIO_CSO_LEFT      = 0x00000008;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "CapSensorType" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int BIO_CST_FACIAL_FEATURES    = 0x00000001;
+  public static final int BIO_CST_VOICE              = 0x00000002;
+  public static final int BIO_CST_FINGERPRINT        = 0x00000004;
+  public static final int BIO_CST_IRIS               = 0x00000008;
+  public static final int BIO_CST_RETINA             = 0x00000010;
+  public static final int BIO_CST_HAND_GEOMETRY      = 0x00000020;
+  public static final int BIO_CST_SIGNATURE_DYNAMICS = 0x00000040;
+  public static final int BIO_CST_KEYSTROKE_DYNAMICS = 0x00000080;
+  public static final int BIO_CST_LIP_MOVEMENT       = 0x00000100;
+  public static final int BIO_CST_THERMAL_FACE_IMAGE = 0x00000200;
+  public static final int BIO_CST_THERMAL_HAND_IMAGE = 0x00000400;
+  public static final int BIO_CST_GAIT               = 0x00000800;
+  public static final int BIO_CST_PASSWORD           = 0x00001000;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "SensorColor" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int BIO_SC_MONO      = 1;
+  public static final int BIO_SC_GRAYSCALE = 2;
+  public static final int BIO_SC_16        = 3;
+  public static final int BIO_SC_256       = 4;
+  public static final int BIO_SC_FULL      = 5;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "SensorOrientation" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int BIO_SO_NORMAL    = 1;
+  public static final int BIO_SO_RIGHT     = 2;
+  public static final int BIO_SO_INVERTED  = 3;
+  public static final int BIO_SO_LEFT      = 4;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "SensorType" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int BIO_ST_FACIAL_FEATURES     =  1;
+  public static final int BIO_ST_VOICE               =  2;
+  public static final int BIO_ST_FINGERPRINT         =  3;
+  public static final int BIO_ST_IRIS                =  4;
+  public static final int BIO_ST_RETINA              =  5;
+  public static final int BIO_ST_HAND_GEOMETRY       =  6;
+  public static final int BIO_ST_SIGNATURE_DYNAMICS  =  7;
+  public static final int BIO_ST_KEYSTROKE_DYNAMICS  =  8;
+  public static final int BIO_ST_LIP_MOVEMENT        =  9;
+  public static final int BIO_ST_THERMAL_FACE_IMAGE  = 10;
+  public static final int BIO_ST_THERMAL_HAND_IMAGE  = 11;
+  public static final int BIO_ST_GAIT                = 12;
+  public static final int BIO_ST_PASSWORD            = 13;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "identify", "identifyMatch, "verify", and "verifyMatch"
+  // "FARPrecedence" Parameter Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final boolean BIO_FAR_PRECEDENCE = true;
+  public static final boolean BIO_FRR_PRECEDENCE = false;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "DataEvent" "Status" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int BIO_DATA_ENROLL = 1;
+  public static final int BIO_DATA_VERIFY = 2;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "StatusUpdateEvent" "Status" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int BIO_SUE_RAW_DATA        =  1;
+  public static final int BIO_SUE_MOVE_LEFT       =  2;
+  public static final int BIO_SUE_MOVE_RIGHT      =  3;
+  public static final int BIO_SUE_MOVE_DOWN       =  4;
+  public static final int BIO_SUE_MOVE_UP         =  5;
+  public static final int BIO_SUE_MOVE_CLOSER     =  6;
+  public static final int BIO_SUE_MOVE_AWAY       =  7;
+  public static final int BIO_SUE_MOVE_BACKWARD   =  8;
+  public static final int BIO_SUE_MOVE_FORWARD    =  9;
+  public static final int BIO_SUE_MOVE_SLOWER     = 10; // 1.11
+  public static final int BIO_SUE_MOVE_FASTER     = 11; // 1.11
+  public static final int BIO_SUE_SENSOR_DIRTY    = 12; // 1.11
+  public static final int BIO_SUE_FAILED_READ     = 13; // 1.12
+  public static final int BIO_SUE_SENSOR_READY    = 14; // 1.13
+  public static final int BIO_SUE_SENSOR_COMPLETE = 15; // 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BiometricsControl110.java b/org.eclipse.osbp.fork.jpos/src/jpos/BiometricsControl110.java
new file mode 100644
index 0000000..91eab15
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BiometricsControl110.java
@@ -0,0 +1,143 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BiometricsControl110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Biometrics for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BiometricsControl110 extends BaseControl
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public boolean getCapPrematchData() throws JposException;
+  public boolean getCapRawSensorData() throws JposException;
+  public boolean getCapRealTimeData() throws JposException;
+  public int     getCapSensorColor() throws JposException;
+  public int     getCapSensorOrientation() throws JposException;
+  public int     getCapSensorType() throws JposException;
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapTemplateAdaptation() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Properties
+  public int     getAlgorithm() throws JposException;
+  public void    setAlgorithm(int algorithm) throws JposException;
+  public String  getAlgorithmList() throws JposException;
+  public boolean getAutoDisable() throws JposException;
+  public void    setAutoDisable(boolean autoDisable) throws JposException;
+  public byte[]  getBIR() throws JposException;
+  public int     getDataCount() throws JposException;
+  public boolean getDataEventEnabled() throws JposException;
+  public void    setDataEventEnabled(boolean dataEventEnabled)
+                     throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+  public byte[]  getRawSensorData() throws JposException;
+  public boolean getRealTimeDataEnabled() throws JposException;
+  public void    setRealTimeDataEnabled(boolean enabled) throws JposException;
+  public int     getSensorBPP() throws JposException;
+  public int     getSensorColor() throws JposException;
+  public void    setSensorColor(int color) throws JposException;
+  public int     getSensorHeight() throws JposException;
+  public int     getSensorOrientation() throws JposException;
+  public void    setSensorOrientation(int orientation) throws JposException;
+  public int     getSensorType() throws JposException;
+  public void    setSensorType(int type) throws JposException;
+  public int     getSensorWidth() throws JposException;
+
+  // Methods
+  public void    beginEnrollCapture(byte[] referenceBIR,
+                                    byte[] payload)
+                     throws JposException;
+  public void    beginVerifyCapture()
+                     throws JposException;
+  public void    clearInput()  throws JposException;
+  public void    clearInputProperties()
+                     throws JposException;
+  public void    compareFirmwareVersion(String firmwareFileName,
+                                        int[] result)
+                     throws JposException;
+  public void    endCapture()
+                     throws JposException;
+  public void    identify(int maxFARRequested,
+                          int maxFRRRequested,
+                          boolean FARPrecedence,
+                          byte[][] referenceBIRPopulation,
+                          int[][] candidateRanking,
+                          int timeout)
+                     throws JposException;
+  public void    identifyMatch(int maxFARRequested,
+                               int maxFRRRequested,
+                               boolean FARPrecedence,
+                               byte[] sampleBIR,
+                               byte[][] referenceBIRPopulation,
+                               int[][] candidateRanking)
+                     throws JposException;
+  public void    processPrematchData(byte[] capturedBIR,
+                                     byte[] prematchDataBIR,
+                                     byte[][] processedBIR)
+                     throws JposException;
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    verify(int maxFARRequested,
+                        int maxFRRRequested,
+                        boolean FARPrecedence,
+                        byte[] referenceBIR,
+                        byte[][] adaptedBIR,
+                        boolean[] result,
+                        int[] FARAchieved,
+                        int[] FRRAchieved,
+                        byte[][] payload,
+                        int timeout)
+                     throws JposException;
+  public void    verifyMatch(int maxFARRequested,
+                             int maxFRRRequested,
+                             boolean FARPrecedence,
+                             byte[] sampleBIR,
+                             byte[] referenceBIR,
+                             byte[][] adaptedBIR,
+                             boolean[] result,
+                             int[] FARAchieved,
+                             int[] FRRAchieved,
+                             byte[][] payload)
+                     throws JposException;
+
+  // Event listener methods
+  public void    addDataListener(DataListener l);
+  public void    removeDataListener(DataListener l);
+  public void    addDirectIOListener(DirectIOListener l);
+  public void    removeDirectIOListener(DirectIOListener l);
+  public void    addErrorListener(ErrorListener l);
+  public void    removeErrorListener(ErrorListener l);
+  public void    addStatusUpdateListener(StatusUpdateListener l);
+  public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BiometricsControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/BiometricsControl111.java
new file mode 100644
index 0000000..327038f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BiometricsControl111.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BiometricsControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Biometrics for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BiometricsControl111 extends BiometricsControl110
+{
+  // Specification changes marked as version 1.11 were incorporated into
+  // the JavaPOS controls 1.10.2 in order to fix implementation issues
+  // for early adopters.
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BiometricsControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/BiometricsControl112.java
new file mode 100644
index 0000000..63b1cac
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BiometricsControl112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BiometricsControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Biometrics for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BiometricsControl112 extends BiometricsControl111
+{
+  // Nothing new added for release 1.12
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BiometricsControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/BiometricsControl113.java
new file mode 100644
index 0000000..6f3484b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BiometricsControl113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BiometricsControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Biometrics for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BiometricsControl113 extends BiometricsControl112
+{
+  // Nothing new added for release 1.13
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BiometricsControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/BiometricsControl114.java
new file mode 100644
index 0000000..c57ecf3
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BiometricsControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BiometricsControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Biometrics for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BiometricsControl114 extends BiometricsControl113
+{
+  // Nothing new added for release 1.14
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BumpBar.java b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBar.java
new file mode 100644
index 0000000..4de65d2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBar.java
@@ -0,0 +1,1525 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BumpBar.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class BumpBar
+  extends BaseJposControl
+  implements BumpBarControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected BumpBarService13 service13;
+  protected BumpBarService14 service14;
+  protected BumpBarService15 service15;
+  protected BumpBarService16 service16;
+  protected BumpBarService17 service17;
+  protected BumpBarService18 service18;
+  protected BumpBarService19 service19;
+  protected BumpBarService110 service110;
+  protected BumpBarService111 service111;
+  protected BumpBarService112 service112;
+  protected BumpBarService113 service113;
+  protected BumpBarService114 service114;
+  protected Vector dataListeners;
+  protected Vector directIOListeners;
+  protected Vector errorListeners;
+  protected Vector outputCompleteListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public BumpBar()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS BumpBar Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service13 = null;
+    //service14 = null;
+    //service15 = null;
+    //service16 = null;
+    //service17 = null;
+    //service18 = null;
+    //service19 = null;
+    //service110 = null;
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    dataListeners = new Vector();
+    directIOListeners = new Vector();
+    errorListeners = new Vector();
+    outputCompleteListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapTone()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapTone();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public boolean getAsyncMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getAsyncMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAsyncMode(boolean asyncMode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setAsyncMode(asyncMode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getAutoToneDuration()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getAutoToneDuration();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAutoToneDuration(int autoToneDuration)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setAutoToneDuration(autoToneDuration);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getAutoToneFrequency()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getAutoToneFrequency();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAutoToneFrequency(int autoToneFrequency)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setAutoToneFrequency(autoToneFrequency);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getBumpBarDataCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getBumpBarDataCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCurrentUnitID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCurrentUnitID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setCurrentUnitID(int currentUnitID)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setCurrentUnitID(currentUnitID);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDataCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getDataCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getDataEventEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getDataEventEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDataEventEnabled(boolean dataEventEnabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setDataEventEnabled(dataEventEnabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getErrorString()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getErrorString();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getErrorUnits()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getErrorUnits();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getEventString()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getEventString();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getEventUnitID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getEventUnitID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getEventUnits()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getEventUnits();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getKeys()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getKeys();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getOutputID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getOutputID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getTimeout()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getTimeout();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setTimeout(int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setTimeout(timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getUnitsOnline()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getUnitsOnline();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void bumpBarSound(int units, int frequency, int duration, int numberOfCycles, int interSoundWait)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.bumpBarSound(units, frequency, duration, numberOfCycles, interSoundWait);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearInput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.clearInput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearOutput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.clearOutput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setKeyTranslation(int units, int scanCode, int logicalKey)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setKeyTranslation(units, scanCode, logicalKey);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new BumpBarCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service13 = null;
+      service14 = null;
+      service15 = null;
+      service16 = null;
+      service17 = null;
+      service18 = null;
+      service19 = null;
+      service110 = null;
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion13)
+      {
+        try
+        {
+          service13 = (BumpBarService13)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BumpBarService13 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion14)
+      {
+        try
+        {
+          service14 = (BumpBarService14)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BumpBarService14 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion15)
+      {
+        try
+        {
+          service15 = (BumpBarService15)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BumpBarService15 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion16)
+      {
+        try
+        {
+          service16 = (BumpBarService16)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BumpBarService16 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion17)
+      {
+        try
+        {
+          service17 = (BumpBarService17)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BumpBarService17 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion18)
+      {
+        try
+        {
+          service18 = (BumpBarService18)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BumpBarService18 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion19)
+      {
+        try
+        {
+          service19 = (BumpBarService19)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BumpBarService19 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion110)
+      {
+        try
+        {
+          service110 = (BumpBarService110)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BumpBarService110 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (BumpBarService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BumpBarService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (BumpBarService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BumpBarService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (BumpBarService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BumpBarService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (BumpBarService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement BumpBarService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.addElement(l);
+    }
+  }
+
+  public void removeDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.removeElement(l);
+    }
+  }
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.addElement(l);
+    }
+  }
+
+  public void removeErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.removeElement(l);
+    }
+  }
+
+  public void addOutputCompleteListener(OutputCompleteListener l)
+  {
+    synchronized(outputCompleteListeners)
+    {
+      outputCompleteListeners.addElement(l);
+    }
+  }
+
+  public void removeOutputCompleteListener(OutputCompleteListener l)
+  {
+    synchronized(outputCompleteListeners)
+    {
+      outputCompleteListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class BumpBarCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)BumpBar.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+      synchronized(BumpBar.this.dataListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < dataListeners.size(); x++)
+        {
+          ((DataListener)dataListeners.elementAt(x)).dataOccurred(e);
+        }
+      }
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(BumpBar.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+      synchronized(BumpBar.this.errorListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < errorListeners.size(); x++)
+        {
+          ((ErrorListener)errorListeners.elementAt(x)).errorOccurred(e);
+        }
+      }
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+      synchronized(BumpBar.this.outputCompleteListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < outputCompleteListeners.size(); x++)
+        {
+          ((OutputCompleteListener)outputCompleteListeners.elementAt(x)).outputCompleteOccurred(e);
+        }
+      }
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(BumpBar.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BumpBar.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBar.manifest.stub
new file mode 100644
index 0000000..c0dde7f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBar.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/BumpBar.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarBeanInfo.java
new file mode 100644
index 0000000..7c325d6
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarBeanInfo.java
@@ -0,0 +1,108 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// BumpBarBeanInfo.java - Bean information for the JavaPOS BumpBar
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class BumpBarBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.BumpBar.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.BumpBar.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapTone"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapUpdateFirmware"),
+
+        // Properties
+        makeProperty("AsyncMode"),
+        makeProperty("AutoToneDuration"),
+        makeProperty("AutoToneFrequency"),
+        makeProperty("BumpBarDataCount"),
+        makeProperty("CurrentUnitID"),
+        makeProperty("DataCount"),
+        makeProperty("DataEventEnabled"),
+        makeProperty("ErrorString"),
+        makeProperty("ErrorUnits"),
+        makeProperty("EventString"),
+        makeProperty("EventUnitID"),
+        makeProperty("EventUnits"),
+        makeProperty("Keys"),
+        makeProperty("OutputID"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState"),
+        makeProperty("Timeout"),
+        makeProperty("UnitsOnline")
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.BumpBar.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("Data"),
+        makeEvent("DirectIO"),
+        makeEvent("Error"),
+        makeEvent("OutputComplete"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarConst.java
new file mode 100644
index 0000000..9a1117f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarConst.java
@@ -0,0 +1,71 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BumpBarConst
+//
+//   Bump Bar constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface BumpBarConst
+{
+    /////////////////////////////////////////////////////////////////////
+    // "CurrentUnitID" and "UnitsOnline" Properties
+    //  and "Units" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int BB_UID_1  = 0x00000001;
+    public static final int BB_UID_2  = 0x00000002;
+    public static final int BB_UID_3  = 0x00000004;
+    public static final int BB_UID_4  = 0x00000008;
+    public static final int BB_UID_5  = 0x00000010;
+    public static final int BB_UID_6  = 0x00000020;
+    public static final int BB_UID_7  = 0x00000040;
+    public static final int BB_UID_8  = 0x00000080;
+    public static final int BB_UID_9  = 0x00000100;
+    public static final int BB_UID_10 = 0x00000200;
+    public static final int BB_UID_11 = 0x00000400;
+    public static final int BB_UID_12 = 0x00000800;
+    public static final int BB_UID_13 = 0x00001000;
+    public static final int BB_UID_14 = 0x00002000;
+    public static final int BB_UID_15 = 0x00004000;
+    public static final int BB_UID_16 = 0x00008000;
+    public static final int BB_UID_17 = 0x00010000;
+    public static final int BB_UID_18 = 0x00020000;
+    public static final int BB_UID_19 = 0x00040000;
+    public static final int BB_UID_20 = 0x00080000;
+    public static final int BB_UID_21 = 0x00100000;
+    public static final int BB_UID_22 = 0x00200000;
+    public static final int BB_UID_23 = 0x00400000;
+    public static final int BB_UID_24 = 0x00800000;
+    public static final int BB_UID_25 = 0x01000000;
+    public static final int BB_UID_26 = 0x02000000;
+    public static final int BB_UID_27 = 0x04000000;
+    public static final int BB_UID_28 = 0x08000000;
+    public static final int BB_UID_29 = 0x10000000;
+    public static final int BB_UID_30 = 0x20000000;
+    public static final int BB_UID_31 = 0x40000000;
+    public static final int BB_UID_32 = 0x80000000;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "DataEvent" Event: "Status" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int BB_DE_KEY = 0x01;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl110.java b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl110.java
new file mode 100644
index 0000000..29a213c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl110.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BumpBarControl110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bump Bar for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BumpBarControl110 extends BumpBarControl19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl111.java
new file mode 100644
index 0000000..a710ecf
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BumpBarControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bump Bar for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BumpBarControl111 extends BumpBarControl110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl112.java
new file mode 100644
index 0000000..bc9af1c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BumpBarControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bump Bar for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BumpBarControl112 extends BumpBarControl111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl113.java
new file mode 100644
index 0000000..119ebfd
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BumpBarControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bump Bar for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BumpBarControl113 extends BumpBarControl112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl114.java
new file mode 100644
index 0000000..294f401
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BumpBarControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Bump Bar for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BumpBarControl114 extends BumpBarControl113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl13.java b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl13.java
new file mode 100644
index 0000000..d5318b5
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl13.java
@@ -0,0 +1,84 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BumpBarControl13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bump Bar for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BumpBarControl13 extends BaseControl
+{
+    // Capabilities
+    public int     getCapPowerReporting() throws JposException;
+    public boolean getCapTone() throws JposException;
+
+    // Properties
+    public boolean getAsyncMode() throws JposException;
+    public void    setAsyncMode(boolean asyncMode) throws JposException;
+    public int     getAutoToneDuration() throws JposException;
+    public void    setAutoToneDuration(int autoToneDuration)
+             throws JposException;
+    public int     getAutoToneFrequency() throws JposException;
+    public void    setAutoToneFrequency(int autoToneFrequency)
+             throws JposException;
+    public int     getBumpBarDataCount() throws JposException;
+    public int     getCurrentUnitID() throws JposException;
+    public void    setCurrentUnitID(int currentUnitID) throws JposException;
+    public int     getDataCount() throws JposException;
+    public boolean getDataEventEnabled() throws JposException;
+    public void    setDataEventEnabled(boolean dataEventEnabled)
+             throws JposException;
+    public String  getErrorString() throws JposException;
+    public int     getErrorUnits() throws JposException;
+    public String  getEventString() throws JposException;
+    public int     getEventUnitID() throws JposException;
+    public int     getEventUnits() throws JposException;
+    public int     getKeys() throws JposException;
+    public int     getOutputID() throws JposException;
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+    public int     getTimeout() throws JposException;
+    public void    setTimeout(int timeout) throws JposException;
+    public int     getUnitsOnline() throws JposException;
+
+    // Methods
+    public void    bumpBarSound(int units, int frequency, int duration,
+                       int numberOfCycles, int interSoundWait)
+                       throws JposException;
+    public void    clearInput()  throws JposException;
+    public void    clearOutput()  throws JposException;
+    public void    setKeyTranslation(int units, int scanCode, int logicalKey)
+                       throws JposException;
+
+    // Event listener methods
+    public void    addDataListener(DataListener l);
+    public void    removeDataListener(DataListener l);
+    public void    addDirectIOListener(DirectIOListener l);
+    public void    removeDirectIOListener(DirectIOListener l);
+    public void    addErrorListener(ErrorListener l);
+    public void    removeErrorListener(ErrorListener l);
+    public void    addOutputCompleteListener(OutputCompleteListener l);
+    public void    removeOutputCompleteListener(OutputCompleteListener l);
+    public void    addStatusUpdateListener(StatusUpdateListener l);
+    public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl14.java b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl14.java
new file mode 100644
index 0000000..5ebbd4d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BumpBarControl14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bump Bar for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BumpBarControl14 extends BumpBarControl13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl15.java b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl15.java
new file mode 100644
index 0000000..dd4616f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl15.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BumpBarControl15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bump Bar for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 00-04-17 JavaPOS Release 1.5                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BumpBarControl15 extends BumpBarControl14
+{
+  // Nothing new added for release 1.5
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl16.java b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl16.java
new file mode 100644
index 0000000..f7be368
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl16.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BumpBarControl16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bump Bar for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-04-18 JavaPOS Release 1.6                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BumpBarControl16 extends BumpBarControl15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl17.java b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl17.java
new file mode 100644
index 0000000..d027a14
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl17.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BumpBarControl17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bump Bar for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BumpBarControl17 extends BumpBarControl16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl18.java b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl18.java
new file mode 100644
index 0000000..b8360fd
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl18.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BumpBarControl18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bump Bar for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BumpBarControl18 extends BumpBarControl17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl19.java b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl19.java
new file mode 100644
index 0000000..8be6e27
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/BumpBarControl19.java
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BumpBarControl19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bump Bar for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface BumpBarControl19 extends BumpBarControl18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CAT.java b/org.eclipse.osbp.fork.jpos/src/jpos/CAT.java
new file mode 100644
index 0000000..ce2bff6
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CAT.java
@@ -0,0 +1,2223 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CAT.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class CAT
+  extends BaseJposControl
+  implements CATControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected CATService14 service14;
+  protected CATService15 service15;
+  protected CATService16 service16;
+  protected CATService17 service17;
+  protected CATService18 service18;
+  protected CATService19 service19;
+  protected CATService110 service110;
+  protected CATService111 service111;
+  protected CATService112 service112;
+  protected CATService113 service113;
+  protected CATService114 service114;
+  protected Vector directIOListeners;
+  protected Vector errorListeners;
+  protected Vector outputCompleteListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public CAT()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS CAT Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service14 = null;
+    //service15 = null;
+    //service16 = null;
+    //service17 = null;
+    //service18 = null;
+    //service19 = null;
+    //service110 = null;
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    directIOListeners = new Vector();
+    errorListeners = new Vector();
+    outputCompleteListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapAdditionalSecurityInformation()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getCapAdditionalSecurityInformation();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapAuthorizeCompletion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getCapAuthorizeCompletion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapAuthorizePreSales()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getCapAuthorizePreSales();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapAuthorizeRefund()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getCapAuthorizeRefund();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapAuthorizeVoid()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getCapAuthorizeVoid();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapAuthorizeVoidPreSales()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getCapAuthorizeVoidPreSales();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCenterResultCode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getCapCenterResultCode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCheckCard()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getCapCheckCard();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapDailyLog()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getCapDailyLog();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapInstallments()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getCapInstallments();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapPaymentDetail()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getCapPaymentDetail();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapTaxOthers()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getCapTaxOthers();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapTransactionNumber()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getCapTransactionNumber();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapTrainingMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getCapTrainingMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCashDeposit()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapCashDeposit();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapLockTerminal()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapLockTerminal();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapLogStatus()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapLogStatus();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUnlockTerminal()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapUnlockTerminal();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public String getAccountNumber()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getAccountNumber();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getAdditionalSecurityInformation()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getAdditionalSecurityInformation();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAdditionalSecurityInformation(String securityInfo)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service14.setAdditionalSecurityInformation(securityInfo);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getApprovalCode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getApprovalCode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getAsyncMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getAsyncMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAsyncMode(boolean asyncMode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service14.setAsyncMode(asyncMode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getCardCompanyID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getCardCompanyID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getCenterResultCode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getCenterResultCode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getDailyLog()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getDailyLog();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPaymentCondition()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getPaymentCondition();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getPaymentDetail()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getPaymentDetail();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service14.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getSequenceNumber()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getSequenceNumber();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getSlipNumber()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getSlipNumber();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getTrainingMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getTrainingMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setTrainingMode(boolean trainingMode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service14.setTrainingMode(trainingMode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getTransactionNumber()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getTransactionNumber();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getTransactionType()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service14.getTransactionType();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPaymentMedia()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getPaymentMedia();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPaymentMedia(int paymentMedia)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.setPaymentMedia(paymentMedia);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public long getBalance()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getBalance();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getLogStatus()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getLogStatus();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public long getSettledAmount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getSettledAmount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getOutputID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.13.0
+    if(serviceVersion < deviceVersion113)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.13.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service113.getOutputID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void accessDailyLog(int sequenceNumber, int type, int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service14.accessDailyLog(sequenceNumber, type, timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void authorizeCompletion(int sequenceNumber, long amount, long taxOthers, int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service14.authorizeCompletion(sequenceNumber, amount, taxOthers, timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void authorizePreSales(int sequenceNumber, long amount, long taxOthers, int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service14.authorizePreSales(sequenceNumber, amount, taxOthers, timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void authorizeRefund(int sequenceNumber, long amount, long taxOthers, int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service14.authorizeRefund(sequenceNumber, amount, taxOthers, timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void authorizeSales(int sequenceNumber, long amount, long taxOthers, int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service14.authorizeSales(sequenceNumber, amount, taxOthers, timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void authorizeVoid(int sequenceNumber, long amount, long taxOthers, int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service14.authorizeVoid(sequenceNumber, amount, taxOthers, timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void authorizeVoidPreSales(int sequenceNumber, long amount, long taxOthers, int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service14.authorizeVoidPreSales(sequenceNumber, amount, taxOthers, timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void checkCard(int sequenceNumber, int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service14.checkCard(sequenceNumber, timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearOutput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service14.clearOutput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void cashDeposit(int sequenceNumber, long amount, int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.cashDeposit(sequenceNumber, amount, timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void lockTerminal()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.lockTerminal();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void unlockTerminal()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.unlockTerminal();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new CATCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service14 = null;
+      service15 = null;
+      service16 = null;
+      service17 = null;
+      service18 = null;
+      service19 = null;
+      service110 = null;
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion14)
+      {
+        try
+        {
+          service14 = (CATService14)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CATService14 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion15)
+      {
+        try
+        {
+          service15 = (CATService15)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CATService15 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion16)
+      {
+        try
+        {
+          service16 = (CATService16)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CATService16 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion17)
+      {
+        try
+        {
+          service17 = (CATService17)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CATService17 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion18)
+      {
+        try
+        {
+          service18 = (CATService18)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CATService18 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion19)
+      {
+        try
+        {
+          service19 = (CATService19)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CATService19 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion110)
+      {
+        try
+        {
+          service110 = (CATService110)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CATService110 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (CATService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CATService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (CATService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CATService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (CATService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CATService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (CATService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CATService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.addElement(l);
+    }
+  }
+
+  public void removeErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.removeElement(l);
+    }
+  }
+
+  public void addOutputCompleteListener(OutputCompleteListener l)
+  {
+    synchronized(outputCompleteListeners)
+    {
+      outputCompleteListeners.addElement(l);
+    }
+  }
+
+  public void removeOutputCompleteListener(OutputCompleteListener l)
+  {
+    synchronized(outputCompleteListeners)
+    {
+      outputCompleteListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class CATCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)CAT.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(CAT.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+      synchronized(CAT.this.errorListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < errorListeners.size(); x++)
+        {
+          ((ErrorListener)errorListeners.elementAt(x)).errorOccurred(e);
+        }
+      }
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+      synchronized(CAT.this.outputCompleteListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < outputCompleteListeners.size(); x++)
+        {
+          ((OutputCompleteListener)outputCompleteListeners.elementAt(x)).outputCompleteOccurred(e);
+        }
+      }
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(CAT.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CAT.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/CAT.manifest.stub
new file mode 100644
index 0000000..249d46b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CAT.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/CAT.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CATBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/CATBeanInfo.java
new file mode 100644
index 0000000..e012471
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CATBeanInfo.java
@@ -0,0 +1,127 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// CATBeanInfo.java - Bean information for the JavaPOS CAT
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class CATBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.CAT.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.CAT.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapAdditionalSecurityInformation"),
+        makeProperty("CapAuthorizeCompletion"),
+        makeProperty("CapAuthorizePreSales"),
+        makeProperty("CapAuthorizeRefund"),
+        makeProperty("CapAuthorizeVoid"),
+        makeProperty("CapAuthorizeVoidPreSales"),
+        makeProperty("CapCenterResultCode"),
+        makeProperty("CapCheckCard"),
+        makeProperty("CapDailyLog"),
+        makeProperty("CapInstallments"),
+        makeProperty("CapPaymentDetail"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapTaxOthers"),
+        makeProperty("CapTransactionNumber"),
+        makeProperty("CapTrainingMode"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapCashDeposit"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapLockTerminal"),
+        makeProperty("CapLogStatus"),
+        makeProperty("CapUnlockTerminal"),
+        makeProperty("CapUpdateFirmware"),
+
+        // Properties
+        makeProperty("AccountNumber"),
+        makeProperty("AdditionalSecurityInformation"),
+        makeProperty("ApprovalCode"),
+        makeProperty("AsyncMode"),
+        makeProperty("CardCompanyID"),
+        makeProperty("CenterResultCode"),
+        makeProperty("DailyLog"),
+        makeProperty("PaymentCondition"),
+        makeProperty("PaymentDetail"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState"),
+        makeProperty("SequenceNumber"),
+        makeProperty("SlipNumber"),
+        makeProperty("TrainingMode"),
+        makeProperty("TransactionNumber"),
+        makeProperty("TransactionType"),
+        makeProperty("PaymentMedia"),
+        makeProperty("Balance"),
+        makeProperty("LogStatus"),
+        makeProperty("SettledAmount"),
+        makeProperty("OutputID")
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.CAT.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("DirectIO"),
+        makeEvent("Error"),
+        makeEvent("OutputComplete"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CATConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/CATConst.java
new file mode 100644
index 0000000..f26a169
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CATConst.java
@@ -0,0 +1,114 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CATConst
+//
+//   Credit Authorization Terminal constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 1998-Nov-02 JavaPOS Release 1.4                                 BS
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//   Added the following constants:
+//     CAT_PAYMENT_ELECTRONIC_MONEY
+//     CAT_TRANSACTION_CASHDEPOSIT
+//     CAT_MEDIA_ELECTRONIC_MONEY
+//     JPOS_ECAT_DEFICIENT
+//     JPOS_ECAT_OVERDEPOSIT
+//     CAT_LOGSTATUS_OK
+//     CAT_LOGSTATUS_NEARFULL
+//     CAT_LOGSTATUS_FULL
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface CATConst
+{
+    /////////////////////////////////////////////////////////////////////
+    // Payment Condition Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int CAT_PAYMENT_LUMP                 =  10;
+    public static final int CAT_PAYMENT_BONUS_1              =  21;
+    public static final int CAT_PAYMENT_BONUS_2              =  22;
+    public static final int CAT_PAYMENT_BONUS_3              =  23;
+    public static final int CAT_PAYMENT_BONUS_4              =  24;
+    public static final int CAT_PAYMENT_BONUS_5              =  25;
+    public static final int CAT_PAYMENT_INSTALLMENT_1        =  61;
+    public static final int CAT_PAYMENT_INSTALLMENT_2        =  62;
+    public static final int CAT_PAYMENT_INSTALLMENT_3        =  63;
+    public static final int CAT_PAYMENT_BONUS_COMBINATION_1  =  31;
+    public static final int CAT_PAYMENT_BONUS_COMBINATION_2  =  32;
+    public static final int CAT_PAYMENT_BONUS_COMBINATION_3  =  33;
+    public static final int CAT_PAYMENT_BONUS_COMBINATION_4  =  34;
+    public static final int CAT_PAYMENT_REVOLVING            =  80;
+    public static final int CAT_PAYMENT_DEBIT                = 110;
+    public static final int CAT_PAYMENT_ELECTRONIC_MONEY     = 111;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // Transaction Type Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int CAT_TRANSACTION_SALES            = 10;
+    public static final int CAT_TRANSACTION_VOID             = 20;
+    public static final int CAT_TRANSACTION_REFUND           = 21;
+    public static final int CAT_TRANSACTION_VOIDPRESALES     = 29;
+    public static final int CAT_TRANSACTION_COMPLETION       = 30;
+    public static final int CAT_TRANSACTION_PRESALES         = 40;
+    public static final int CAT_TRANSACTION_CHECKCARD        = 41;
+    public static final int CAT_TRANSACTION_CASHDEPOSIT      = 50;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "PaymentMedia' Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int CAT_MEDIA_UNSPECIFIED            = 0;
+    public static final int CAT_MEDIA_NONDEFINE              = 0;
+    public static final int CAT_MEDIA_CREDIT                 = 1;
+    public static final int CAT_MEDIA_DEBIT                  = 2;
+    public static final int CAT_MEDIA_ELECTRONIC_MONEY       = 3;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "Daily Log" Property  & Argument Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int CAT_DL_NONE                   = 0;  //None of them
+    public static final int CAT_DL_REPORTING              = 1;  //Only Reporting
+    public static final int CAT_DL_SETTLEMENT             = 2;  //Only Settlement
+    public static final int CAT_DL_REPORTING_SETTLEMENT   = 3;  //Both of them
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "LogStatus" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int CAT_LOGSTATUS_OK              = 1;
+    public static final int CAT_LOGSTATUS_NEARFULL        = 2;
+    public static final int CAT_LOGSTATUS_FULL            = 3;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // ResultCodeExtended Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int JPOS_ECAT_CENTERERROR            =  01;
+    public static final int JPOS_ECAT_COMMANDERROR           =  90;
+    public static final int JPOS_ECAT_RESET                  =  91;
+    public static final int JPOS_ECAT_COMMUNICATIONERROR     =  92;
+    public static final int JPOS_ECAT_DAILYLOGOVERFLOW       = 200;
+    public static final int JPOS_ECAT_DEFICIENT              = 201;
+    public static final int JPOS_ECAT_OVERDEPOSIT            = 202;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CATControl110.java b/org.eclipse.osbp.fork.jpos/src/jpos/CATControl110.java
new file mode 100644
index 0000000..1c6d70c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CATControl110.java
@@ -0,0 +1,31 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CATControl110
+//
+//   Interface definining all capabilities, properties and methods that are
+//   specific to the Credit Authorization Terminal for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+//////////////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CATControl110 extends CATControl19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CATControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/CATControl111.java
new file mode 100644
index 0000000..dc0ba04
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CATControl111.java
@@ -0,0 +1,31 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CATControl111
+//
+//   Interface definining all capabilities, properties and methods that are
+//   specific to the Credit Authorization Terminal for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+//////////////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CATControl111 extends CATControl110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CATControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/CATControl112.java
new file mode 100644
index 0000000..24aeb76
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CATControl112.java
@@ -0,0 +1,31 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CATControl112
+//
+//   Interface definining all capabilities, properties and methods that are
+//   specific to the Credit Authorization Terminal for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+//////////////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CATControl112 extends CATControl111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CATControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/CATControl113.java
new file mode 100644
index 0000000..6a9912c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CATControl113.java
@@ -0,0 +1,34 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CATControl113
+//
+//   Interface definining all capabilities, properties and methods that are
+//   specific to the Credit Authorization Terminal for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+// 2010-Nov-17 JavaPOS Release 1.13.3                              BS
+//   Added missing property OutputID
+//
+//////////////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CATControl113 extends CATControl112
+{
+  // Properties
+  public int     getOutputID() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CATControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/CATControl114.java
new file mode 100644
index 0000000..0c5c7e4
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CATControl114.java
@@ -0,0 +1,31 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CATControl114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to the Credit Authorization Terminal for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+//////////////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CATControl114 extends CATControl113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CATControl14.java b/org.eclipse.osbp.fork.jpos/src/jpos/CATControl14.java
new file mode 100644
index 0000000..3e68e32
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CATControl14.java
@@ -0,0 +1,98 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CATControl14
+//
+//   Interface definining all capabilities, properties and methods that are
+//   specific to the Credit Authorization Terminal for release 1.4.
+//
+// Modification history
+// ---------------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                           BS
+//
+//////////////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CATControl14 extends BaseControl
+{
+    // Capabilities
+    public boolean getCapAdditionalSecurityInformation() throws JposException;
+    public boolean getCapAuthorizeCompletion() throws JposException;
+    public boolean getCapAuthorizePreSales() throws JposException;
+    public boolean getCapAuthorizeRefund() throws JposException;
+    public boolean getCapAuthorizeVoid() throws JposException;
+    public boolean getCapAuthorizeVoidPreSales() throws JposException;
+    public boolean getCapCenterResultCode() throws JposException;
+    public boolean getCapCheckCard() throws JposException;
+    public int     getCapDailyLog() throws JposException;
+    public boolean getCapInstallments() throws JposException;
+    public boolean getCapPaymentDetail() throws JposException;
+	  public int     getCapPowerReporting() throws JposException;
+    public boolean getCapTaxOthers() throws JposException;
+    public boolean getCapTransactionNumber() throws JposException;
+    public boolean getCapTrainingMode() throws JposException;
+
+    // Properties
+    public String  getAccountNumber() throws JposException;
+    public String  getAdditionalSecurityInformation() throws JposException;
+    public void    setAdditionalSecurityInformation(String securityInfo)
+                       throws JposException;
+    public String  getApprovalCode() throws JposException;
+    public boolean getAsyncMode() throws JposException;
+    public void    setAsyncMode(boolean asyncMode) throws JposException;
+    public String  getCardCompanyID() throws JposException;
+    public String  getCenterResultCode() throws JposException;
+    public String  getDailyLog() throws JposException;
+    public int     getPaymentCondition() throws JposException;
+    public String  getPaymentDetail() throws JposException;
+		public int     getPowerNotify() throws JposException;
+		public void    setPowerNotify(int powerNotify) throws JposException;
+		public int     getPowerState() throws JposException;
+    public int     getSequenceNumber() throws JposException;
+    public String  getSlipNumber() throws JposException;
+    public boolean getTrainingMode() throws JposException;
+    public void    setTrainingMode(boolean trainingMode) throws JposException;
+    public String  getTransactionNumber() throws JposException;
+    public String  getTransactionType() throws JposException;
+
+    // Methods
+    public void    accessDailyLog(int sequenceNumber, int type, int timeout)
+                       throws JposException;
+    public void    authorizeCompletion(int sequenceNumber, long amount,
+                       long taxOthers, int timeout) throws JposException;
+    public void    authorizePreSales(int sequenceNumber, long amount,
+                       long taxOthers, int timeout) throws JposException;
+    public void    authorizeRefund(int sequenceNumber, long amount,
+                       long taxOthers, int timeout) throws JposException;
+    public void    authorizeSales(int sequenceNumber, long amount,
+                       long taxOthers, int timeout) throws JposException;
+    public void    authorizeVoid(int sequenceNumber, long amount,
+                       long taxOthers, int timeout) throws JposException;
+    public void    authorizeVoidPreSales(int sequenceNumber, long amount,
+                       long taxOthers, int timeout) throws JposException;
+    public void    checkCard(int sequenceNumber, int timeout)
+                       throws JposException;
+    public void    clearOutput() throws JposException;
+
+    // Event listener methods
+    public void    addDirectIOListener(DirectIOListener l);
+    public void    removeDirectIOListener(DirectIOListener l);
+    public void    addErrorListener(ErrorListener l);
+    public void    removeErrorListener(ErrorListener l);
+    public void    addOutputCompleteListener(OutputCompleteListener l);
+    public void    removeOutputCompleteListener(OutputCompleteListener l);
+    public void    addStatusUpdateListener(StatusUpdateListener l);
+    public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CATControl15.java b/org.eclipse.osbp.fork.jpos/src/jpos/CATControl15.java
new file mode 100644
index 0000000..2c94d0a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CATControl15.java
@@ -0,0 +1,33 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CATControl15
+//
+//   Interface definining all capabilities, properties and methods that are
+//   specific to the Credit Authorization Terminal for release 1.5.
+//
+// Modification history
+// ---------------------------------------------------------------------------
+// 00-04-17 JavaPOS Release 1.5                                           BS
+//
+//////////////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CATControl15 extends CATControl14
+{
+	// Properties
+	public int     getPaymentMedia() throws JposException;
+	public void    setPaymentMedia(int paymentMedia) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CATControl16.java b/org.eclipse.osbp.fork.jpos/src/jpos/CATControl16.java
new file mode 100644
index 0000000..3db3144
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CATControl16.java
@@ -0,0 +1,31 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CATControl16
+//
+//   Interface definining all capabilities, properties and methods that are
+//   specific to the Credit Authorization Terminal for release 1.6.
+//
+// Modification history
+// ---------------------------------------------------------------------------
+// 01-04-18 JavaPOS Release 1.6                                           BS
+//
+//////////////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CATControl16 extends CATControl15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CATControl17.java b/org.eclipse.osbp.fork.jpos/src/jpos/CATControl17.java
new file mode 100644
index 0000000..2b92e06
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CATControl17.java
@@ -0,0 +1,31 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CATControl17
+//
+//   Interface definining all capabilities, properties and methods that are
+//   specific to the Credit Authorization Terminal for release 1.7.
+//
+// Modification history
+// ---------------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                          BS
+//
+//////////////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CATControl17 extends CATControl16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CATControl18.java b/org.eclipse.osbp.fork.jpos/src/jpos/CATControl18.java
new file mode 100644
index 0000000..d113cb4
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CATControl18.java
@@ -0,0 +1,41 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CATControl18
+//
+//   Interface definining all capabilities, properties and methods that are
+//   specific to the Credit Authorization Terminal for release 1.8.
+//
+// Modification history
+// ---------------------------------------------------------------------------
+// 03-Jun-2003 JavaPOS Release 1.8                                          BS
+//
+//////////////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CATControl18 extends CATControl17
+{
+	// Capabilities
+	public boolean getCapStatisticsReporting() throws JposException;
+	public boolean getCapUpdateStatistics() throws JposException;
+
+	// Methods
+	public void    resetStatistics(String statisticsBuffer)
+										 throws JposException;
+	public void    retrieveStatistics(String[] statisticsBuffer)
+										 throws JposException;
+	public void    updateStatistics(String statisticsBuffer)
+										 throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CATControl19.java b/org.eclipse.osbp.fork.jpos/src/jpos/CATControl19.java
new file mode 100644
index 0000000..772e567
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CATControl19.java
@@ -0,0 +1,54 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CATControl19
+//
+//   Interface definining all capabilities, properties and methods that are
+//   specific to the Credit Authorization Terminal for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS release 1.9                                 BS
+//
+//////////////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CATControl19 extends CATControl18
+{
+  // Capabilities
+  public boolean getCapCashDeposit() throws JposException;
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapLockTerminal() throws JposException;
+  public boolean getCapLogStatus() throws JposException;
+  public boolean getCapUnlockTerminal() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Properties
+  public long    getBalance() throws JposException;
+  public int     getLogStatus() throws JposException;
+  public long    getSettledAmount() throws JposException;
+
+  // Methods
+  public void    cashDeposit(int sequenceNumber, long amount, int timeout)
+                     throws JposException;
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    lockTerminal()
+                     throws JposException;
+  public void    unlockTerminal()
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashChanger.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashChanger.java
new file mode 100644
index 0000000..89f9b74
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashChanger.java
@@ -0,0 +1,2225 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChanger.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class CashChanger
+  extends BaseJposControl
+  implements CashChangerControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected CashChangerService12 service12;
+  protected CashChangerService13 service13;
+  protected CashChangerService14 service14;
+  protected CashChangerService15 service15;
+  protected CashChangerService16 service16;
+  protected CashChangerService17 service17;
+  protected CashChangerService18 service18;
+  protected CashChangerService19 service19;
+  protected CashChangerService110 service110;
+  protected CashChangerService111 service111;
+  protected CashChangerService112 service112;
+  protected CashChangerService113 service113;
+  protected CashChangerService114 service114;
+  protected Vector directIOListeners;
+  protected Vector statusUpdateListeners;
+  protected Vector dataListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public CashChanger()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS CashChanger Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service12 = null;
+    //service13 = null;
+    //service14 = null;
+    //service15 = null;
+    //service16 = null;
+    //service17 = null;
+    //service18 = null;
+    //service19 = null;
+    //service110 = null;
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    directIOListeners = new Vector();
+    statusUpdateListeners = new Vector();
+    dataListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapDiscrepancy()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapDiscrepancy();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapEmptySensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapEmptySensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapFullSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapFullSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapNearEmptySensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapNearEmptySensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapNearFullSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapNearFullSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapDeposit()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapDeposit();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapDepositDataEvent()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapDepositDataEvent();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapPauseDeposit()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapPauseDeposit();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRepayDeposit()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapRepayDeposit();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapJamSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.11.0
+    if(serviceVersion < deviceVersion111)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.11.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapJamSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRealTimeData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.11.0
+    if(serviceVersion < deviceVersion111)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.11.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapRealTimeData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public boolean getAsyncMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getAsyncMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAsyncMode(boolean asyncMode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setAsyncMode(asyncMode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getAsyncResultCode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getAsyncResultCode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getAsyncResultCodeExtended()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getAsyncResultCodeExtended();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getCurrencyCashList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCurrencyCashList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getCurrencyCode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCurrencyCode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setCurrencyCode(String currencyCode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setCurrencyCode(currencyCode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getCurrencyCodeList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCurrencyCodeList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCurrentExit()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCurrentExit();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setCurrentExit(int currentExit)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setCurrentExit(currentExit);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDeviceExits()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getDeviceExits();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDeviceStatus()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getDeviceStatus();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getExitCashList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getExitCashList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getFullStatus()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getFullStatus();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDataCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getDataCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getDataEventEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getDataEventEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDataEventEnabled(boolean dataEventEnabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.setDataEventEnabled(dataEventEnabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDepositAmount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getDepositAmount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getDepositCashList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getDepositCashList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getDepositCodeList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getDepositCodeList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getDepositCounts()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getDepositCounts();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDepositStatus()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getDepositStatus();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCurrentService()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.11.0
+    if(serviceVersion < deviceVersion111)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.11.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCurrentService();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setCurrentService(int currentService)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.11.0
+    if(serviceVersion < deviceVersion111)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.11.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.setCurrentService(currentService);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getRealTimeDataEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.11.0
+    if(serviceVersion < deviceVersion111)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.11.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getRealTimeDataEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setRealTimeDataEnabled(boolean bEnabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.11.0
+    if(serviceVersion < deviceVersion111)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.11.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.setRealTimeDataEnabled(bEnabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getServiceCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.11.0
+    if(serviceVersion < deviceVersion111)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.11.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getServiceCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getServiceIndex()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.11.0
+    if(serviceVersion < deviceVersion111)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.11.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getServiceIndex();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void dispenseCash(String cashCounts)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.dispenseCash(cashCounts);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void dispenseChange(int amount)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.dispenseChange(amount);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void readCashCounts(String[] cashCounts, boolean[] discrepancy)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.readCashCounts(cashCounts, discrepancy);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void beginDeposit()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.beginDeposit();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearInput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.clearInput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void endDeposit(int success)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.endDeposit(success);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void fixDeposit()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.fixDeposit();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void pauseDeposit(int control)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.pauseDeposit(control);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void adjustCashCounts(String cashCounts)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.11.0
+    if(serviceVersion < deviceVersion111)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.11.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.adjustCashCounts(cashCounts);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new CashChangerCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service12 = null;
+      service13 = null;
+      service14 = null;
+      service15 = null;
+      service16 = null;
+      service17 = null;
+      service18 = null;
+      service19 = null;
+      service110 = null;
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion12)
+      {
+        try
+        {
+          service12 = (CashChangerService12)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CashChangerService12 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion13)
+      {
+        try
+        {
+          service13 = (CashChangerService13)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CashChangerService13 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion14)
+      {
+        try
+        {
+          service14 = (CashChangerService14)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CashChangerService14 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion15)
+      {
+        try
+        {
+          service15 = (CashChangerService15)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CashChangerService15 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion16)
+      {
+        try
+        {
+          service16 = (CashChangerService16)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CashChangerService16 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion17)
+      {
+        try
+        {
+          service17 = (CashChangerService17)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CashChangerService17 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion18)
+      {
+        try
+        {
+          service18 = (CashChangerService18)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CashChangerService18 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion19)
+      {
+        try
+        {
+          service19 = (CashChangerService19)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CashChangerService19 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion110)
+      {
+        try
+        {
+          service110 = (CashChangerService110)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CashChangerService110 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (CashChangerService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CashChangerService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (CashChangerService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CashChangerService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (CashChangerService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CashChangerService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (CashChangerService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CashChangerService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+  public void addDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.addElement(l);
+    }
+  }
+
+  public void removeDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class CashChangerCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)CashChanger.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+      synchronized(CashChanger.this.dataListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < dataListeners.size(); x++)
+        {
+          ((DataListener)dataListeners.elementAt(x)).dataOccurred(e);
+        }
+      }
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(CashChanger.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(CashChanger.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashChanger.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/CashChanger.manifest.stub
new file mode 100644
index 0000000..3ac2271
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashChanger.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/CashChanger.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerBeanInfo.java
new file mode 100644
index 0000000..74d44a2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerBeanInfo.java
@@ -0,0 +1,122 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// CashChangerBeanInfo.java - Bean information for the JavaPOS CashChanger
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class CashChangerBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.CashChanger.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.CashChanger.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapDiscrepancy"),
+        makeProperty("CapEmptySensor"),
+        makeProperty("CapFullSensor"),
+        makeProperty("CapNearEmptySensor"),
+        makeProperty("CapNearFullSensor"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapDeposit"),
+        makeProperty("CapDepositDataEvent"),
+        makeProperty("CapPauseDeposit"),
+        makeProperty("CapRepayDeposit"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapUpdateFirmware"),
+        makeProperty("CapJamSensor"),
+        makeProperty("CapRealTimeData"),
+
+        // Properties
+        makeProperty("AsyncMode"),
+        makeProperty("AsyncResultCode"),
+        makeProperty("AsyncResultCodeExtended"),
+        makeProperty("CurrencyCashList"),
+        makeProperty("CurrencyCode"),
+        makeProperty("CurrencyCodeList"),
+        makeProperty("CurrentExit"),
+        makeProperty("DeviceExits"),
+        makeProperty("DeviceStatus"),
+        makeProperty("ExitCashList"),
+        makeProperty("FullStatus"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState"),
+        makeProperty("DataCount"),
+        makeProperty("DataEventEnabled"),
+        makeProperty("DepositAmount"),
+        makeProperty("DepositCashList"),
+        makeProperty("DepositCodeList"),
+        makeProperty("DepositCounts"),
+        makeProperty("DepositStatus"),
+        makeProperty("CurrentService"),
+        makeProperty("RealTimeDataEnabled"),
+        makeProperty("ServiceCount"),
+        makeProperty("ServiceIndex")
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.CashChanger.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("Data"),
+        makeEvent("DirectIO"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerConst.java
new file mode 100644
index 0000000..86bbd45
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerConst.java
@@ -0,0 +1,85 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerConst
+//
+//   Cash Changer constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface CashChangerConst
+{
+    //###################################################################
+    //#### Cash Changer Constants
+    //###################################################################
+
+    /////////////////////////////////////////////////////////////////////
+    // "DeviceStatus" and "FullStatus" Property Constants
+    // "StatusUpdateEvent" Event Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int CHAN_STATUS_OK       =  0; // DeviceStatus, FullStatus
+
+    public static final int CHAN_STATUS_EMPTY    = 11; // DeviceStatus, StatusUpdateEvent
+    public static final int CHAN_STATUS_NEAREMPTY= 12; // DeviceStatus, StatusUpdateEvent
+    public static final int CHAN_STATUS_EMPTYOK  = 13; // StatusUpdateEvent
+
+    public static final int CHAN_STATUS_FULL     = 21; // FullStatus, StatusUpdateEvent
+    public static final int CHAN_STATUS_NEARFULL = 22; // FullStatus, StatusUpdateEvent
+    public static final int CHAN_STATUS_FULLOK   = 23; // StatusUpdateEvent
+
+    public static final int CHAN_STATUS_JAM      = 31; // DeviceStatus, StatusUpdateEvent
+    public static final int CHAN_STATUS_JAMOK    = 32; // StatusUpdateEvent
+
+    public static final int CHAN_STATUS_ASYNC    = 91; // StatusUpdateEvent
+
+
+		/////////////////////////////////////////////////////////////////////
+		// "DepositStatus" Property Constants
+		/////////////////////////////////////////////////////////////////////
+
+    public static final int CHAN_STATUS_DEPOSIT_START = 1;
+    public static final int CHAN_STATUS_DEPOSIT_END   = 2;
+    public static final int CHAN_STATUS_DEPOSIT_NONE  = 3;
+    public static final int CHAN_STATUS_DEPOSIT_COUNT = 4;
+    public static final int CHAN_STATUS_DEPOSIT_JAM   = 5;
+
+
+		/////////////////////////////////////////////////////////////////////
+		// "EndDeposit" Method: "Success" Parameter Constants
+		/////////////////////////////////////////////////////////////////////
+
+    public static final int CHAN_DEPOSIT_CHANGE   = 1;
+    public static final int CHAN_DEPOSIT_NOCHANGE = 2;
+    public static final int CHAN_DEPOSIT_REPAY    = 3;
+
+
+		/////////////////////////////////////////////////////////////////////
+		// "PauseDeposit" Method: "Control" Parameter Constants
+		/////////////////////////////////////////////////////////////////////
+
+    public static final int CHAN_DEPOSIT_PAUSE   = 11;
+    public static final int CHAN_DEPOSIT_RESTART = 12;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "ResultCodeExtended" Property Constants for Cash Changer
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int JPOS_ECHAN_OVERDISPENSE = 1 + JposConst.JPOSERREXT;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl110.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl110.java
new file mode 100644
index 0000000..757d521
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl110.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerControl110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Changer for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CashChangerControl110 extends CashChangerControl19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl111.java
new file mode 100644
index 0000000..862a897
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl111.java
@@ -0,0 +1,46 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Changer for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+// 2008-Jul-23 Corrected spelling mistake of setCurrentService     BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CashChangerControl111 extends CashChangerControl110
+{
+  // Capabilities
+  public boolean getCapJamSensor() throws JposException;
+  public boolean getCapRealTimeData() throws JposException;
+
+  // Properties
+  public int     getCurrentService() throws JposException;
+  public void    setCurrentService(int currentService) throws JposException;
+  public boolean getRealTimeDataEnabled() throws JposException;
+  public void    setRealTimeDataEnabled(boolean bEnabled) throws JposException;
+  public int     getServiceCount() throws JposException;
+  public int     getServiceIndex() throws JposException;
+
+  // Methods
+  public void    adjustCashCounts(String cashCounts)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl112.java
new file mode 100644
index 0000000..dcdaf50
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Changer for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CashChangerControl112 extends CashChangerControl111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl113.java
new file mode 100644
index 0000000..7c76cd8
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Changer for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CashChangerControl113 extends CashChangerControl112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl114.java
new file mode 100644
index 0000000..2ec286e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Cash Changer for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CashChangerControl114 extends CashChangerControl113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl12.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl12.java
new file mode 100644
index 0000000..dad2d9b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl12.java
@@ -0,0 +1,64 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerControl12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to Cash Changer for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CashChangerControl12 extends BaseControl
+{
+    // Capabilities
+    public boolean getCapDiscrepancy() throws JposException;
+    public boolean getCapEmptySensor() throws JposException;
+    public boolean getCapFullSensor() throws JposException;
+    public boolean getCapNearEmptySensor() throws JposException;
+    public boolean getCapNearFullSensor() throws JposException;
+
+    // Properties
+    public boolean getAsyncMode() throws JposException;
+    public void    setAsyncMode(boolean asyncMode) throws JposException;
+    public int     getAsyncResultCode() throws JposException;
+    public int     getAsyncResultCodeExtended() throws JposException;
+    public String  getCurrencyCashList() throws JposException;
+    public String  getCurrencyCode() throws JposException;
+    public void    setCurrencyCode(String currencyCode) throws JposException;
+    public String  getCurrencyCodeList() throws JposException;
+    public int     getCurrentExit() throws JposException;
+    public void    setCurrentExit(int currentExit) throws JposException;
+    public int     getDeviceExits() throws JposException;
+    public int     getDeviceStatus() throws JposException;
+    public String  getExitCashList() throws JposException;
+    public int     getFullStatus() throws JposException;
+
+    // Methods
+    public void    dispenseCash(String cashCounts) throws JposException;
+    public void    dispenseChange(int amount) throws JposException;
+    public void    readCashCounts(String[] cashCounts,
+                       boolean[] discrepancy) throws JposException;
+
+    // Event listener methods
+    public void    addDirectIOListener(DirectIOListener l);
+    public void    removeDirectIOListener(DirectIOListener l);
+    public void    addStatusUpdateListener(StatusUpdateListener l);
+    public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl13.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl13.java
new file mode 100644
index 0000000..42a31b8
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl13.java
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerControl13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Changer for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CashChangerControl13 extends CashChangerControl12
+{
+  // Capabilities
+  public int     getCapPowerReporting() throws JposException;
+
+  // Properties
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl14.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl14.java
new file mode 100644
index 0000000..b6c6542
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerControl14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Changer for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CashChangerControl14 extends CashChangerControl13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl15.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl15.java
new file mode 100644
index 0000000..d8049a0
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl15.java
@@ -0,0 +1,57 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerControl15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Changer for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 00-04-17 JavaPOS Release 1.5                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CashChangerControl15 extends CashChangerControl14
+{
+    // Capabilities
+    public boolean getCapDeposit() throws JposException;
+    public boolean getCapDepositDataEvent() throws JposException;
+    public boolean getCapPauseDeposit() throws JposException;
+    public boolean getCapRepayDeposit() throws JposException;
+
+    // Properties
+    public int     getDataCount() throws JposException;
+    public boolean getDataEventEnabled() throws JposException;
+    public void    setDataEventEnabled(boolean dataEventEnabled)
+                       throws JposException;
+    public int     getDepositAmount() throws JposException;
+    public String  getDepositCashList() throws JposException;
+    public String  getDepositCodeList() throws JposException;
+    public String  getDepositCounts() throws JposException;
+    public int     getDepositStatus() throws JposException;
+
+    // Methods
+    public void    beginDeposit() throws JposException;
+    public void    clearInput() throws JposException;
+    public void    endDeposit(int success) throws JposException;
+    public void    fixDeposit() throws JposException;
+    public void    pauseDeposit(int control) throws JposException;
+
+    // Event listener methods
+    public void    addDataListener(DataListener l);
+    public void    removeDataListener(DataListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl16.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl16.java
new file mode 100644
index 0000000..b334399
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl16.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerControl16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Changer for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-04-18 JavaPOS Release 1.6                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CashChangerControl16 extends CashChangerControl15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl17.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl17.java
new file mode 100644
index 0000000..d2f6a73
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl17.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerControl17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Changer for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CashChangerControl17 extends CashChangerControl16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl18.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl18.java
new file mode 100644
index 0000000..12fde76
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl18.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerControl18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Changer for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CashChangerControl18 extends CashChangerControl17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl19.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl19.java
new file mode 100644
index 0000000..4ad4df0
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashChangerControl19.java
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerControl19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Changer for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CashChangerControl19 extends CashChangerControl18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawer.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawer.java
new file mode 100644
index 0000000..60954ea
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawer.java
@@ -0,0 +1,949 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawer.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class CashDrawer
+  extends BaseJposControl
+  implements CashDrawerControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected CashDrawerService12 service12;
+  protected CashDrawerService13 service13;
+  protected CashDrawerService14 service14;
+  protected CashDrawerService15 service15;
+  protected CashDrawerService16 service16;
+  protected CashDrawerService17 service17;
+  protected CashDrawerService18 service18;
+  protected CashDrawerService19 service19;
+  protected CashDrawerService110 service110;
+  protected CashDrawerService111 service111;
+  protected CashDrawerService112 service112;
+  protected CashDrawerService113 service113;
+  protected CashDrawerService114 service114;
+  protected Vector directIOListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public CashDrawer()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS CashDrawer Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service12 = null;
+    //service13 = null;
+    //service14 = null;
+    //service15 = null;
+    //service16 = null;
+    //service17 = null;
+    //service18 = null;
+    //service19 = null;
+    //service110 = null;
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    directIOListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapStatus()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapStatus();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatusMultiDrawerDetect()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapStatusMultiDrawerDetect();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public boolean getDrawerOpened()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getDrawerOpened();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void openDrawer()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.openDrawer();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void waitForDrawerClose(int beepTimeout, int beepFrequency, int beepDuration, int beepDelay)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.waitForDrawerClose(beepTimeout, beepFrequency, beepDuration, beepDelay);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new CashDrawerCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service12 = null;
+      service13 = null;
+      service14 = null;
+      service15 = null;
+      service16 = null;
+      service17 = null;
+      service18 = null;
+      service19 = null;
+      service110 = null;
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion12)
+      {
+        try
+        {
+          service12 = (CashDrawerService12)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CashDrawerService12 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion13)
+      {
+        try
+        {
+          service13 = (CashDrawerService13)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CashDrawerService13 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion14)
+      {
+        try
+        {
+          service14 = (CashDrawerService14)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CashDrawerService14 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion15)
+      {
+        try
+        {
+          service15 = (CashDrawerService15)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CashDrawerService15 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion16)
+      {
+        try
+        {
+          service16 = (CashDrawerService16)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CashDrawerService16 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion17)
+      {
+        try
+        {
+          service17 = (CashDrawerService17)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CashDrawerService17 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion18)
+      {
+        try
+        {
+          service18 = (CashDrawerService18)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CashDrawerService18 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion19)
+      {
+        try
+        {
+          service19 = (CashDrawerService19)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CashDrawerService19 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion110)
+      {
+        try
+        {
+          service110 = (CashDrawerService110)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CashDrawerService110 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (CashDrawerService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CashDrawerService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (CashDrawerService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CashDrawerService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (CashDrawerService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CashDrawerService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (CashDrawerService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CashDrawerService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class CashDrawerCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)CashDrawer.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(CashDrawer.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(CashDrawer.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawer.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawer.manifest.stub
new file mode 100644
index 0000000..144cd3e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawer.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/CashDrawer.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerBeanInfo.java
new file mode 100644
index 0000000..e8f026c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerBeanInfo.java
@@ -0,0 +1,91 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// CashDrawerBeanInfo.java - Bean information for the JavaPOS CashDrawer
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class CashDrawerBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.CashDrawer.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.CashDrawer.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapStatus"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapStatusMultiDrawerDetect"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapUpdateFirmware"),
+
+        // Properties
+        makeProperty("DrawerOpened"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState")
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.CashDrawer.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("DirectIO"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerConst.java
new file mode 100644
index 0000000..162e701
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerConst.java
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerConst
+//
+//   Cash Drawer constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface CashDrawerConst
+{
+    //###################################################################
+    //#### Cash Drawer Constants
+    //###################################################################
+
+    /////////////////////////////////////////////////////////////////////
+    // "StatusUpdateEvent" Event: "status" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+    public static final int CASH_SUE_DRAWERCLOSED =   0;
+    public static final int CASH_SUE_DRAWEROPEN   =   1;
+
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl110.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl110.java
new file mode 100644
index 0000000..59e3b46
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl110.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerControl110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Drawer for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CashDrawerControl110 extends CashDrawerControl19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl111.java
new file mode 100644
index 0000000..9a125b4
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Drawer for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CashDrawerControl111 extends CashDrawerControl110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl112.java
new file mode 100644
index 0000000..5e17137
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Drawer for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CashDrawerControl112 extends CashDrawerControl111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl113.java
new file mode 100644
index 0000000..c2426b0
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Drawer for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CashDrawerControl113 extends CashDrawerControl112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl114.java
new file mode 100644
index 0000000..54f69c1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Cash Drawer for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CashDrawerControl114 extends CashDrawerControl113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl12.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl12.java
new file mode 100644
index 0000000..9d7cfa6
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl12.java
@@ -0,0 +1,46 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerControl12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to Cash Drawer for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CashDrawerControl12 extends BaseControl
+{
+    // Capabilities
+    public boolean getCapStatus() throws JposException;
+
+    // Properties
+    public boolean getDrawerOpened() throws JposException;
+
+    // Methods
+    public void    openDrawer() throws JposException;
+    public void    waitForDrawerClose(int beepTimeout, int beepFrequency,
+                       int beepDuration, int beepDelay) throws JposException;
+
+    // Event listener methods
+    public void    addDirectIOListener(DirectIOListener l);
+    public void    removeDirectIOListener(DirectIOListener l);
+    public void    addStatusUpdateListener(StatusUpdateListener l);
+    public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl13.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl13.java
new file mode 100644
index 0000000..9056b0c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl13.java
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerControl13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Drawer for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CashDrawerControl13 extends CashDrawerControl12
+{
+    // Capabilities
+  public int     getCapPowerReporting() throws JposException;
+
+    // Properties
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl14.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl14.java
new file mode 100644
index 0000000..5727a0f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerControl14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Drawer for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CashDrawerControl14 extends CashDrawerControl13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl15.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl15.java
new file mode 100644
index 0000000..220be76
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl15.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerControl15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Drawer for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 00-04-17 JavaPOS Release 1.5                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CashDrawerControl15 extends CashDrawerControl14
+{
+  // Capabilities
+  public boolean getCapStatusMultiDrawerDetect() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl16.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl16.java
new file mode 100644
index 0000000..6b4c6cb
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl16.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerControl16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Drawer for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-04-18 JavaPOS Release 1.6                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CashDrawerControl16 extends CashDrawerControl15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl17.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl17.java
new file mode 100644
index 0000000..fcc0e6a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl17.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerControl17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Drawer for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CashDrawerControl17 extends CashDrawerControl16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl18.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl18.java
new file mode 100644
index 0000000..d26a351
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl18.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerControl18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Drawer for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CashDrawerControl18 extends CashDrawerControl17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl19.java b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl19.java
new file mode 100644
index 0000000..6d861ee
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CashDrawerControl19.java
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerControl19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Drawer for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CashDrawerControl19 extends CashDrawerControl18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CheckScanner.java b/org.eclipse.osbp.fork.jpos/src/jpos/CheckScanner.java
new file mode 100644
index 0000000..ec2f3fe
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CheckScanner.java
@@ -0,0 +1,2216 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CheckScanner.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class CheckScanner
+  extends BaseJposControl
+  implements CheckScannerControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected CheckScannerService17 service17;
+  protected CheckScannerService18 service18;
+  protected CheckScannerService19 service19;
+  protected CheckScannerService110 service110;
+  protected CheckScannerService111 service111;
+  protected CheckScannerService112 service112;
+  protected CheckScannerService113 service113;
+  protected CheckScannerService114 service114;
+  protected Vector dataListeners;
+  protected Vector directIOListeners;
+  protected Vector errorListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public CheckScanner()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS CheckScanner Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service17 = null;
+    //service18 = null;
+    //service19 = null;
+    //service110 = null;
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    dataListeners = new Vector();
+    directIOListeners = new Vector();
+    errorListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapAutoGenerateFileID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getCapAutoGenerateFileID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapAutoGenerateImageTagData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getCapAutoGenerateImageTagData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapAutoSize()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getCapAutoSize();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapColor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getCapColor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapConcurrentMICR()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getCapConcurrentMICR();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapDefineCropArea()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getCapDefineCropArea();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapImageFormat()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getCapImageFormat();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapImageTagData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getCapImageTagData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapMICRDevice()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getCapMICRDevice();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStoreImageFiles()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getCapStoreImageFiles();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapValidationDevice()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getCapValidationDevice();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapAutoContrast()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapAutoContrast();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapContrast()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapContrast();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public boolean getAutoDisable()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getAutoDisable();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAutoDisable(boolean autoDisable)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.setAutoDisable(autoDisable);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getColor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getColor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setColor(int nColor)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.setColor(nColor);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getConcurrentMICR()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getConcurrentMICR();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setConcurrentMICR(boolean bConcurrentMICR)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.setConcurrentMICR(bConcurrentMICR);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCropAreaCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getCropAreaCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDataCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getDataCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getDataEventEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getDataEventEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDataEventEnabled(boolean dataEventEnabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.setDataEventEnabled(dataEventEnabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDocumentHeight()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getDocumentHeight();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDocumentHeight(int nDocumentHeight)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.setDocumentHeight(nDocumentHeight);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDocumentWidth()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getDocumentWidth();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDocumentWidth(int nDocumentWidth)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.setDocumentWidth(nDocumentWidth);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getFileID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getFileID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setFileID(String sFileID)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.setFileID(sFileID);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getFileIndex()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getFileIndex();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setFileIndex(int nFileIndex)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.setFileIndex(nFileIndex);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public byte[] getImageData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getImageData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getImageFormat()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getImageFormat();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setImageFormat(int nImageFormat)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.setImageFormat(nImageFormat);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getImageMemoryStatus()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getImageMemoryStatus();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getImageTagData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getImageTagData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setImageTagData(String sImageTagData)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.setImageTagData(sImageTagData);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getMapMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getMapMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setMapMode(int nMapMode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.setMapMode(nMapMode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getMaxCropAreas()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getMaxCropAreas();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getQuality()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getQuality();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setQuality(int nQuality)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.setQuality(nQuality);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getQualityList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getQualityList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getRemainingImagesEstimate()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getRemainingImagesEstimate();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getContrast()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getContrast();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setContrast(int contrast)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.setContrast(contrast);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void beginInsertion(int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.beginInsertion(timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void beginRemoval(int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.beginRemoval(timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearImage(int by)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.clearImage(by);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearInput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.clearInput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void defineCropArea(int cropAreaID, int x, int y, int cx, int cy)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.defineCropArea(cropAreaID, x, y, cx, cy);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void endInsertion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.endInsertion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void endRemoval()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.endRemoval();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveImage(int cropAreaID)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.retrieveImage(cropAreaID);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveMemory(int by)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.retrieveMemory(by);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void storeImage(int by)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.storeImage(by);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearInputProperties()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.10.0
+    if(serviceVersion < deviceVersion110)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.10.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.clearInputProperties();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new CheckScannerCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service17 = null;
+      service18 = null;
+      service19 = null;
+      service110 = null;
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion17)
+      {
+        try
+        {
+          service17 = (CheckScannerService17)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CheckScannerService17 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion18)
+      {
+        try
+        {
+          service18 = (CheckScannerService18)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CheckScannerService18 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion19)
+      {
+        try
+        {
+          service19 = (CheckScannerService19)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CheckScannerService19 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion110)
+      {
+        try
+        {
+          service110 = (CheckScannerService110)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CheckScannerService110 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (CheckScannerService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CheckScannerService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (CheckScannerService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CheckScannerService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (CheckScannerService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CheckScannerService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (CheckScannerService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CheckScannerService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.addElement(l);
+    }
+  }
+
+  public void removeDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.removeElement(l);
+    }
+  }
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.addElement(l);
+    }
+  }
+
+  public void removeErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class CheckScannerCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)CheckScanner.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+      synchronized(CheckScanner.this.dataListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < dataListeners.size(); x++)
+        {
+          ((DataListener)dataListeners.elementAt(x)).dataOccurred(e);
+        }
+      }
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(CheckScanner.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+      synchronized(CheckScanner.this.errorListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < errorListeners.size(); x++)
+        {
+          ((ErrorListener)errorListeners.elementAt(x)).errorOccurred(e);
+        }
+      }
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(CheckScanner.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CheckScanner.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/CheckScanner.manifest.stub
new file mode 100644
index 0000000..fef9fcb
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CheckScanner.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/CheckScanner.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerBeanInfo.java
new file mode 100644
index 0000000..8aeb12a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerBeanInfo.java
@@ -0,0 +1,124 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// CheckScannerBeanInfo.java - Bean information for the JavaPOS CheckScanner
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class CheckScannerBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.CheckScanner.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.CheckScanner.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapAutoGenerateFileID"),
+        makeProperty("CapAutoGenerateImageTagData"),
+        makeProperty("CapAutoSize"),
+        makeProperty("CapColor"),
+        makeProperty("CapConcurrentMICR"),
+        makeProperty("CapDefineCropArea"),
+        makeProperty("CapImageFormat"),
+        makeProperty("CapImageTagData"),
+        makeProperty("CapMICRDevice"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapStoreImageFiles"),
+        makeProperty("CapValidationDevice"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapAutoContrast"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapContrast"),
+        makeProperty("CapUpdateFirmware"),
+
+        // Properties
+        makeProperty("AutoDisable"),
+        makeProperty("Color"),
+        makeProperty("ConcurrentMICR"),
+        makeProperty("CropAreaCount"),
+        makeProperty("DataCount"),
+        makeProperty("DataEventEnabled"),
+        makeProperty("DocumentHeight"),
+        makeProperty("DocumentWidth"),
+        makeProperty("FileID"),
+        makeProperty("FileIndex"),
+        makeProperty("ImageData"),
+        makeProperty("ImageFormat"),
+        makeProperty("ImageMemoryStatus"),
+        makeProperty("ImageTagData"),
+        makeProperty("MapMode"),
+        makeProperty("MaxCropAreas"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState"),
+        makeProperty("Quality"),
+        makeProperty("QualityList"),
+        makeProperty("RemainingImagesEstimate"),
+        makeProperty("Contrast"),
+
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.CheckScanner.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("Data"),
+        makeEvent("DirectIO"),
+        makeEvent("Error"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerConst.java
new file mode 100644
index 0000000..6ee568f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerConst.java
@@ -0,0 +1,150 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CheckScannerConst
+//
+//   Check Scanner constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2002-Jul-01 JavaPOS Release 1.7                                 BS
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//   Added the following constants:
+//     CHK_AUTOMATIC_CONTRAST
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface CheckScannerConst
+{
+    //###################################################################
+    //#### Check Scanner Constants
+    //###################################################################
+
+    /////////////////////////////////////////////////////////////////////
+    // "CapColor" Capability Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int CHK_CCL_MONO      = 0x00000001;
+    public static final int CHK_CCL_GRAYSCALE = 0x00000002;
+    public static final int CHK_CCL_16        = 0x00000004;
+    public static final int CHK_CCL_256       = 0x00000008;
+    public static final int CHK_CCL_FULL      = 0x00000010;
+
+    /////////////////////////////////////////////////////////////////////
+    // "CapImageFormat" Capability Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int CHK_CIF_NATIVE = 0x00000001;
+    public static final int CHK_CIF_TIFF   = 0x00000002;
+    public static final int CHK_CIF_BMP    = 0x00000004;
+    public static final int CHK_CIF_JPEG   = 0x00000008;
+    public static final int CHK_CIF_GIF    = 0x00000010;
+
+    /////////////////////////////////////////////////////////////////////
+    // "Color" Capability Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int CHK_CL_MONO      = 1;
+    public static final int CHK_CL_GRAYSCALE = 2;
+    public static final int CHK_CL_16        = 3;
+    public static final int CHK_CL_256       = 4;
+    public static final int CHK_CL_FULL      = 5;
+
+    /////////////////////////////////////////////////////////////////////
+    // "constrast" Property Constants:
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int CHK_AUTOMATIC_CONTRAST = -1;
+
+    /////////////////////////////////////////////////////////////////////
+    // "ImageFormat" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int CHK_IF_NATIVE = 1;
+    public static final int CHK_IF_TIFF   = 2;
+    public static final int CHK_IF_BMP    = 3;
+    public static final int CHK_IF_JPEG   = 4;
+    public static final int CHK_IF_GIF    = 5;
+
+    /////////////////////////////////////////////////////////////////////
+    // "ImageMemoryStatus" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int CHK_IMS_EMPTY = 1;
+    public static final int CHK_IMS_OK    = 2;
+    public static final int CHK_IMS_FULL  = 3;
+
+    /////////////////////////////////////////////////////////////////////
+    // "MapMode" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int CHK_MM_DOTS          = 1;
+    public static final int CHK_MM_TWIPS         = 2;
+    public static final int CHK_MM_ENGLISH       = 3;
+    public static final int CHK_MM_METRIC        = 4;
+
+    /////////////////////////////////////////////////////////////////////
+    // "clearImage" Method Constants:
+    /////////////////////////////////////////////////////////////////////
+
+    //   "by" Parameter
+    public static final int CHK_CLR_ALL             = 1;
+    public static final int CHK_CLR_BY_FILEID       = 2;
+    public static final int CHK_CLR_BY_FILEINDEX    = 3;
+    public static final int CHK_CLR_BY_IMAGETAGDATA = 4;
+
+    /////////////////////////////////////////////////////////////////////
+    // "defineCropArea" Method Constants:
+    /////////////////////////////////////////////////////////////////////
+
+    // "cropAreaID" Parameter or index number
+    public static final int CHK_CROP_AREA_ENTIRE_IMAGE = -1;
+    public static final int CHK_CROP_AREA_RESET_ALL    = -2;
+
+    // "cx" Parameter or integer width
+    public static final int CHK_CROP_AREA_RIGHT        = -1;
+
+    // "cy" Parameter or integer height
+    public static final int CHK_CROP_AREA_BOTTOM       = -1;
+
+    /////////////////////////////////////////////////////////////////////
+    // "retrieveMemory" Method Constants:
+    /////////////////////////////////////////////////////////////////////
+
+    // "by" Parameter
+    public static final int CHK_LOCATE_BY_FILEID       = 1;
+    public static final int CHK_LOCATE_BY_FILEINDEX    = 2;
+    public static final int CHK_LOCATE_BY_IMAGETAGDATA = 3;
+
+    /////////////////////////////////////////////////////////////////////
+    // "RetrieveImage" and "StoreImage" Method Constant:
+    /////////////////////////////////////////////////////////////////////
+
+    // "CropAreaID" Parameter or index number
+    //public static final int CHK_CROP_AREA_ENTIRE_IMAGE = -1; (Defined above)
+
+    /////////////////////////////////////////////////////////////////////
+    // "ErrorCodeExtended" Property Constants for Check Scanner
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int JPOS_ECHK_NOCHECK = 1 + JposConst.JPOSERREXT; // endInsertion
+    public static final int JPOS_ECHK_CHECK   = 2 + JposConst.JPOSERREXT; // endRemoval
+    public static final int JPOS_ECHK_NOROOM  = 3 + JposConst.JPOSERREXT; // storeImage
+
+    /////////////////////////////////////////////////////////////////////
+    // "StatusUpdateEvent" Event: "status" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int CHK_SUE_SCANCOMPLETE = 11;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerControl110.java b/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerControl110.java
new file mode 100644
index 0000000..9881c1e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerControl110.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CheckScannerControl110
+//
+//   Interface definining all new capabilities, properties and
+//                                Check Scanner
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CheckScannerControl110 extends CheckScannerControl19
+{
+  // Methods
+  public void    clearInputProperties()
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerControl111.java
new file mode 100644
index 0000000..506d49d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerControl111.java
@@ -0,0 +1,30 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CheckScannerControl111
+//
+//   Interface definining all new capabilities, properties and
+//                                Check Scanner
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CheckScannerControl111 extends CheckScannerControl110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerControl112.java
new file mode 100644
index 0000000..289ae44
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerControl112.java
@@ -0,0 +1,30 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CheckScannerControl112
+//
+//   Interface definining all new capabilities, properties and
+//                                Check Scanner
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CheckScannerControl112 extends CheckScannerControl111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerControl113.java
new file mode 100644
index 0000000..5dc44d8
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerControl113.java
@@ -0,0 +1,30 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CheckScannerControl113
+//
+//   Interface definining all new capabilities, properties and
+//                                Check Scanner
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CheckScannerControl113 extends CheckScannerControl112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerControl114.java
new file mode 100644
index 0000000..a602bdb
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CheckScannerControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Check Scanner for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CheckScannerControl114 extends CheckScannerControl113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerControl17.java b/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerControl17.java
new file mode 100644
index 0000000..eaadbd6
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerControl17.java
@@ -0,0 +1,102 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CheckScannerControl17
+//
+//   Interface definining all new capabilities, properties and
+//                                Check Scanner
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CheckScannerControl17 extends BaseControl
+{
+  // Capabilities
+  public boolean getCapAutoGenerateFileID() throws JposException;
+  public boolean getCapAutoGenerateImageTagData() throws JposException;
+  public boolean getCapAutoSize() throws JposException;
+  public int     getCapColor() throws JposException;
+  public boolean getCapConcurrentMICR() throws JposException;
+  public boolean getCapDefineCropArea() throws JposException;
+  public int     getCapImageFormat() throws JposException;
+  public boolean getCapImageTagData() throws JposException;
+  public boolean getCapMICRDevice() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public boolean getCapStoreImageFiles() throws JposException;
+  public boolean getCapValidationDevice() throws JposException;
+
+  // Properties
+  public boolean getAutoDisable() throws JposException;
+  public void    setAutoDisable(boolean autoDisable) throws JposException;
+  public int     getColor() throws JposException;
+  public void    setColor(int nColor) throws JposException;
+  public boolean getConcurrentMICR() throws JposException;
+  public void    setConcurrentMICR(boolean bConcurrentMICR) throws JposException;
+  public int     getCropAreaCount() throws JposException;
+  public int     getDataCount() throws JposException;
+  public boolean getDataEventEnabled() throws JposException;
+  public void    setDataEventEnabled(boolean dataEventEnabled)
+                     throws JposException;
+  public int     getDocumentHeight() throws JposException;
+  public void    setDocumentHeight(int nDocumentHeight) throws JposException;
+  public int     getDocumentWidth() throws JposException;
+  public void    setDocumentWidth(int nDocumentWidth) throws JposException;
+  public String  getFileID() throws JposException;
+  public void    setFileID(String sFileID) throws JposException;
+  public int     getFileIndex() throws JposException;
+  public void    setFileIndex(int nFileIndex) throws JposException;
+  public byte[]  getImageData() throws JposException;
+  public int     getImageFormat() throws JposException;
+  public void    setImageFormat(int nImageFormat) throws JposException;
+  public int     getImageMemoryStatus() throws JposException;
+  public String  getImageTagData() throws JposException;
+  public void    setImageTagData(String sImageTagData) throws JposException;
+  public int     getMapMode() throws JposException;
+  public void    setMapMode(int nMapMode) throws JposException;
+  public int     getMaxCropAreas() throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+  public int     getQuality() throws JposException;
+  public void    setQuality(int nQuality) throws JposException;
+  public String  getQualityList() throws JposException;
+  public int     getRemainingImagesEstimate() throws JposException;
+
+  // Methods
+  public void    beginInsertion(int timeout) throws JposException;
+  public void    beginRemoval(int timeout) throws JposException;
+  public void    clearImage(int by) throws JposException;
+  public void    clearInput() throws JposException;
+  public void    defineCropArea(int cropAreaID, int x, int y, int cx, int cy)
+                   throws JposException;
+  public void    endInsertion() throws JposException;
+  public void    endRemoval() throws JposException;
+  public void    retrieveImage(int cropAreaID) throws JposException;
+  public void    retrieveMemory(int by) throws JposException;
+  public void    storeImage(int by) throws JposException;
+
+  // Event listener methods
+  public void    addDataListener(DataListener l);
+  public void    removeDataListener(DataListener l);
+  public void    addDirectIOListener(DirectIOListener l);
+  public void    removeDirectIOListener(DirectIOListener l);
+  public void    addErrorListener(ErrorListener l);
+  public void    removeErrorListener(ErrorListener l);
+  public void    addStatusUpdateListener(StatusUpdateListener l);
+  public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerControl18.java b/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerControl18.java
new file mode 100644
index 0000000..7880b33
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerControl18.java
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CheckScannerControl18
+//
+//   Interface definining all new capabilities, properties and
+//                                Check Scanner
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CheckScannerControl18 extends CheckScannerControl17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerControl19.java b/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerControl19.java
new file mode 100644
index 0000000..aab1064
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CheckScannerControl19.java
@@ -0,0 +1,44 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CheckScannerControl19
+//
+//   Interface definining all new capabilities, properties and
+//                                Check Scanner
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CheckScannerControl19 extends CheckScannerControl18
+{
+  // Capabilities
+  public boolean getCapAutoContrast() throws JposException;
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapContrast() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Properties
+  public int     getContrast() throws JposException;
+  public void    setContrast(int contrast) throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CoinAcceptor.java b/org.eclipse.osbp.fork.jpos/src/jpos/CoinAcceptor.java
new file mode 100644
index 0000000..b35c2f3
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CoinAcceptor.java
@@ -0,0 +1,1249 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinAcceptor.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class CoinAcceptor
+  extends BaseJposControl
+  implements CoinAcceptorControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected CoinAcceptorService111 service111;
+  protected CoinAcceptorService112 service112;
+  protected CoinAcceptorService113 service113;
+  protected CoinAcceptorService114 service114;
+  protected Vector dataListeners;
+  protected Vector directIOListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public CoinAcceptor()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS CoinAcceptor Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    dataListeners = new Vector();
+    directIOListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapDiscrepancy()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapDiscrepancy();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapFullSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapFullSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapJamSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapJamSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapNearFullSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapNearFullSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapPauseDeposit()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapPauseDeposit();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRealTimeData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapRealTimeData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public String getCurrencyCode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCurrencyCode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setCurrencyCode(String currencyCode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.setCurrencyCode(currencyCode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDataCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getDataCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getDataEventEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getDataEventEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDataEventEnabled(boolean dataEventEnabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.setDataEventEnabled(dataEventEnabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDepositAmount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getDepositAmount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getDepositCashList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getDepositCashList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getDepositCodeList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getDepositCodeList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getDepositCounts()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getDepositCounts();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDepositStatus()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getDepositStatus();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getFullStatus()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getFullStatus();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getRealTimeDataEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getRealTimeDataEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setRealTimeDataEnabled(boolean bEnabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.setRealTimeDataEnabled(bEnabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void adjustCashCounts(String cashCounts)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.adjustCashCounts(cashCounts);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void beginDeposit()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.beginDeposit();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearInput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.clearInput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void endDeposit(int success)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.endDeposit(success);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void fixDeposit()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.fixDeposit();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void pauseDeposit(int control)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.pauseDeposit(control);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void readCashCounts(String[] cashCounts, boolean[] discrepancy)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.readCashCounts(cashCounts, discrepancy);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new CoinAcceptorCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (CoinAcceptorService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CoinAcceptorService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (CoinAcceptorService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CoinAcceptorService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (CoinAcceptorService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CoinAcceptorService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (CoinAcceptorService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CoinAcceptorService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.addElement(l);
+    }
+  }
+
+  public void removeDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.removeElement(l);
+    }
+  }
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class CoinAcceptorCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)CoinAcceptor.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+      synchronized(CoinAcceptor.this.dataListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < dataListeners.size(); x++)
+        {
+          ((DataListener)dataListeners.elementAt(x)).dataOccurred(e);
+        }
+      }
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(CoinAcceptor.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(CoinAcceptor.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CoinAcceptor.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/CoinAcceptor.manifest.stub
new file mode 100644
index 0000000..a100473
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CoinAcceptor.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/CoinAcceptor.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CoinAcceptorBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/CoinAcceptorBeanInfo.java
new file mode 100644
index 0000000..ba9dab8
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CoinAcceptorBeanInfo.java
@@ -0,0 +1,106 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// CoinAcceptorBeanInfo.java - Bean information for the JavaPOS CoinAcceptor
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class CoinAcceptorBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.CoinAcceptor.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.CoinAcceptor.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapDiscrepancy"),
+        makeProperty("CapFullSensor"),
+        makeProperty("CapJamSensor"),
+        makeProperty("CapNearFullSensor"),
+        makeProperty("CapPauseDeposit"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapRealTimeData"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateFirmware"),
+        makeProperty("CapUpdateStatistics"),
+
+        // Properties
+        makeProperty("CurrencyCode"),
+        makeProperty("DataCount"),
+        makeProperty("DataEventEnabled"),
+        makeProperty("DepositAmount"),
+        makeProperty("DepositCashList"),
+        makeProperty("DepositCodeList"),
+        makeProperty("DepositCounts"),
+        makeProperty("DepositStatus"),
+        makeProperty("FullStatus"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState"),
+        makeProperty("RealTimeDataEnabled"),
+
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.CoinAcceptor.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("Data"),
+        makeEvent("DirectIO"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CoinAcceptorConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/CoinAcceptorConst.java
new file mode 100644
index 0000000..6c07c44
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CoinAcceptorConst.java
@@ -0,0 +1,70 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinAcceptorConst
+//
+//   CoinAcceptor constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface CoinAcceptorConst
+{
+  //###################################################################
+  //#### CoinAcceptor Constants
+  //###################################################################
+
+  /////////////////////////////////////////////////////////////////////
+  // "FullStatus" Property Constants
+  // "StatusUpdateEvent" Event Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int CACC_STATUS_OK               = 0;
+
+  public static final int CACC_STATUS_FULL             = 21; // FullStatus, StatusUpdateEvent
+  public static final int CACC_STATUS_NEARFULL         = 22; // FullStatus, StatusUpdateEvent
+  public static final int CACC_STATUS_FULLOK           = 23; // StatusUpdateEvent
+
+  public static final int CACC_STATUS_JAM              = 31; // StatusUpdateEvent
+  public static final int CACC_STATUS_JAMOK            = 32; // StatusUpdateEvent
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "DepositStatus" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int CACC_STATUS_DEPOSIT_START    = 1;
+  public static final int CACC_STATUS_DEPOSIT_END      = 2;
+  public static final int CACC_STATUS_DEPOSIT_COUNT    = 4;
+  public static final int CACC_STATUS_DEPOSIT_JAM      = 5;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "EndDeposit" Method Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int CACC_DEPOSIT_COMPLETE        = 11;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "PauseDeposit" Method Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int CACC_DEPOSIT_PAUSE           = 11;
+  public static final int CACC_DEPOSIT_RESTART         = 12;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CoinAcceptorControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/CoinAcceptorControl111.java
new file mode 100644
index 0000000..871c8aa
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CoinAcceptorControl111.java
@@ -0,0 +1,97 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinAcceptorControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Acceptor for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CoinAcceptorControl111 extends BaseControl
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapDiscrepancy() throws JposException;
+  public boolean getCapFullSensor() throws JposException;
+  public boolean getCapJamSensor() throws JposException;
+  public boolean getCapNearFullSensor() throws JposException;
+  public boolean getCapPauseDeposit() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public boolean getCapRealTimeData() throws JposException;
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Properties
+  public String  getCurrencyCode() throws JposException;
+  public void    setCurrencyCode(String currencyCode) throws JposException;
+  public int     getDataCount() throws JposException;
+  public boolean getDataEventEnabled() throws JposException;
+  public void    setDataEventEnabled(boolean dataEventEnabled)
+                     throws JposException;
+  public int     getDepositAmount() throws JposException;
+  public String  getDepositCashList() throws JposException;
+  public String  getDepositCodeList() throws JposException;
+  public String  getDepositCounts() throws JposException;
+  public int     getDepositStatus() throws JposException;
+  public int     getFullStatus() throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+  public boolean getRealTimeDataEnabled() throws JposException;
+  public void    setRealTimeDataEnabled(boolean bEnabled) throws JposException;
+
+  // Methods
+  public void    adjustCashCounts(String cashCounts)
+                     throws JposException;
+  public void    beginDeposit()
+                     throws JposException;
+  public void    clearInput()  throws JposException;
+  public void    compareFirmwareVersion(String firmwareFileName,
+                                        int[] result)
+                     throws JposException;
+  public void    endDeposit(int success)
+                     throws JposException;
+  public void    fixDeposit()
+                     throws JposException;
+  public void    pauseDeposit(int control)
+                     throws JposException;
+  public void    readCashCounts(String[] cashCounts,
+                                boolean[] discrepancy)
+                     throws JposException;
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+
+  // Event listener methods
+  public void    addDataListener(DataListener l);
+  public void    removeDataListener(DataListener l);
+  public void    addDirectIOListener(DirectIOListener l);
+  public void    removeDirectIOListener(DirectIOListener l);
+  public void    addStatusUpdateListener(StatusUpdateListener l);
+  public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CoinAcceptorControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/CoinAcceptorControl112.java
new file mode 100644
index 0000000..78e6041
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CoinAcceptorControl112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinAcceptorControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Acceptor for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CoinAcceptorControl112 extends CoinAcceptorControl111
+{
+  // Nothing new added for release 1.12
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CoinAcceptorControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/CoinAcceptorControl113.java
new file mode 100644
index 0000000..5d7f14d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CoinAcceptorControl113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinAcceptorControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Acceptor for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CoinAcceptorControl113 extends CoinAcceptorControl112
+{
+  // Nothing new added for release 1.13
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CoinAcceptorControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/CoinAcceptorControl114.java
new file mode 100644
index 0000000..19b3214
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CoinAcceptorControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinAcceptorControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Coin Acceptor for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CoinAcceptorControl114 extends CoinAcceptorControl113
+{
+  // Nothing new added for release 1.14
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenser.java b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenser.java
new file mode 100644
index 0000000..a222368
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenser.java
@@ -0,0 +1,1006 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenser.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class CoinDispenser
+  extends BaseJposControl
+  implements CoinDispenserControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected CoinDispenserService12 service12;
+  protected CoinDispenserService13 service13;
+  protected CoinDispenserService14 service14;
+  protected CoinDispenserService15 service15;
+  protected CoinDispenserService16 service16;
+  protected CoinDispenserService17 service17;
+  protected CoinDispenserService18 service18;
+  protected CoinDispenserService19 service19;
+  protected CoinDispenserService110 service110;
+  protected CoinDispenserService111 service111;
+  protected CoinDispenserService112 service112;
+  protected CoinDispenserService113 service113;
+  protected CoinDispenserService114 service114;
+  protected Vector directIOListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public CoinDispenser()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS CoinDispenser Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service12 = null;
+    //service13 = null;
+    //service14 = null;
+    //service15 = null;
+    //service16 = null;
+    //service17 = null;
+    //service18 = null;
+    //service19 = null;
+    //service110 = null;
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    directIOListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapEmptySensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapEmptySensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapJamSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapJamSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapNearEmptySensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapNearEmptySensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public int getDispenserStatus()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getDispenserStatus();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void dispenseChange(int amount)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.dispenseChange(amount);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void adjustCashCounts(String cashCounts)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.11.0
+    if(serviceVersion < deviceVersion111)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.11.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.adjustCashCounts(cashCounts);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void readCashCounts(String[] cashCounts, boolean[] discrepancy)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.11.0
+    if(serviceVersion < deviceVersion111)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.11.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.readCashCounts(cashCounts, discrepancy);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new CoinDispenserCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service12 = null;
+      service13 = null;
+      service14 = null;
+      service15 = null;
+      service16 = null;
+      service17 = null;
+      service18 = null;
+      service19 = null;
+      service110 = null;
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion12)
+      {
+        try
+        {
+          service12 = (CoinDispenserService12)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CoinDispenserService12 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion13)
+      {
+        try
+        {
+          service13 = (CoinDispenserService13)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CoinDispenserService13 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion14)
+      {
+        try
+        {
+          service14 = (CoinDispenserService14)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CoinDispenserService14 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion15)
+      {
+        try
+        {
+          service15 = (CoinDispenserService15)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CoinDispenserService15 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion16)
+      {
+        try
+        {
+          service16 = (CoinDispenserService16)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CoinDispenserService16 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion17)
+      {
+        try
+        {
+          service17 = (CoinDispenserService17)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CoinDispenserService17 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion18)
+      {
+        try
+        {
+          service18 = (CoinDispenserService18)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CoinDispenserService18 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion19)
+      {
+        try
+        {
+          service19 = (CoinDispenserService19)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CoinDispenserService19 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion110)
+      {
+        try
+        {
+          service110 = (CoinDispenserService110)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CoinDispenserService110 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (CoinDispenserService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CoinDispenserService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (CoinDispenserService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CoinDispenserService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (CoinDispenserService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CoinDispenserService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (CoinDispenserService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement CoinDispenserService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class CoinDispenserCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)CoinDispenser.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(CoinDispenser.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(CoinDispenser.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenser.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenser.manifest.stub
new file mode 100644
index 0000000..8df50ab
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenser.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/CoinDispenser.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserBeanInfo.java
new file mode 100644
index 0000000..8d006b2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserBeanInfo.java
@@ -0,0 +1,92 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// CoinDispenserBeanInfo.java - Bean information for the JavaPOS CoinDispenser
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class CoinDispenserBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.CoinDispenser.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.CoinDispenser.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapEmptySensor"),
+        makeProperty("CapJamSensor"),
+        makeProperty("CapNearEmptySensor"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapUpdateFirmware"),
+
+        // Properties
+        makeProperty("DispenserStatus"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState")
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.CoinDispenser.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("DirectIO"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserConst.java
new file mode 100644
index 0000000..f6c14f1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserConst.java
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserConst
+//
+//   Coin Dispenser constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface CoinDispenserConst
+{
+    //###################################################################
+    //#### Coin Dispenser Constants
+    //###################################################################
+
+    /////////////////////////////////////////////////////////////////////
+    // "DispenserStatus" Property Constants
+    // "StatusUpdateEvent" Event: "status" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int COIN_STATUS_OK       = 1;
+    public static final int COIN_STATUS_EMPTY    = 2;
+    public static final int COIN_STATUS_NEAREMPTY= 3;
+    public static final int COIN_STATUS_JAM      = 4;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl110.java b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl110.java
new file mode 100644
index 0000000..4b37252
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl110.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserControl110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Dispenser for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CoinDispenserControl110 extends CoinDispenserControl19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl111.java
new file mode 100644
index 0000000..c5269a4
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl111.java
@@ -0,0 +1,35 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Dispenser for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CoinDispenserControl111 extends CoinDispenserControl110
+{
+  // Methods
+  public void    adjustCashCounts(String cashCounts)
+                     throws JposException;
+  public void    readCashCounts(String[] cashCounts,
+                                boolean[] discrepancy)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl112.java
new file mode 100644
index 0000000..fe6820f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl112.java
@@ -0,0 +1,30 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Dispenser for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CoinDispenserControl112 extends CoinDispenserControl111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl113.java
new file mode 100644
index 0000000..4548089
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl113.java
@@ -0,0 +1,30 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Dispenser for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CoinDispenserControl113 extends CoinDispenserControl112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl114.java
new file mode 100644
index 0000000..b435a75
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl114.java
@@ -0,0 +1,30 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Coin Dispenser for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CoinDispenserControl114 extends CoinDispenserControl113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl12.java b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl12.java
new file mode 100644
index 0000000..216b19b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl12.java
@@ -0,0 +1,46 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserControl12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to Coin Dispenser for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CoinDispenserControl12 extends BaseControl
+{
+    // Capabilities
+    public boolean getCapEmptySensor() throws JposException;
+    public boolean getCapJamSensor() throws JposException;
+    public boolean getCapNearEmptySensor() throws JposException;
+
+    // Properties
+    public int     getDispenserStatus() throws JposException;
+
+    // Methods
+    public void    dispenseChange(int amount) throws JposException;
+
+    // Event listener methods
+    public void    addDirectIOListener(DirectIOListener l);
+    public void    removeDirectIOListener(DirectIOListener l);
+    public void    addStatusUpdateListener(StatusUpdateListener l);
+    public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl13.java b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl13.java
new file mode 100644
index 0000000..d1095fc
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl13.java
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserControl13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Dispenser for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CoinDispenserControl13 extends CoinDispenserControl12
+{
+    // Capabilities
+  public int     getCapPowerReporting() throws JposException;
+
+    // Properties
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl14.java b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl14.java
new file mode 100644
index 0000000..e00565d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserControl14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Dispenser for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CoinDispenserControl14 extends CoinDispenserControl13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl15.java b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl15.java
new file mode 100644
index 0000000..19eb805
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl15.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserControl15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Dispenser for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 00-04-17 JavaPOS Release 1.5                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CoinDispenserControl15 extends CoinDispenserControl14
+{
+  // Nothing new added for release 1.5
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl16.java b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl16.java
new file mode 100644
index 0000000..6235d4d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl16.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserControl16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Dispenser for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-04-18 JavaPOS Release 1.6                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CoinDispenserControl16 extends CoinDispenserControl15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl17.java b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl17.java
new file mode 100644
index 0000000..114227b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl17.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserControl17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Dispenser for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CoinDispenserControl17 extends CoinDispenserControl16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl18.java b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl18.java
new file mode 100644
index 0000000..4f8d4b4
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl18.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserControl18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Dispenser for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CoinDispenserControl18 extends CoinDispenserControl17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl19.java b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl19.java
new file mode 100644
index 0000000..48df244
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/CoinDispenserControl19.java
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserControl19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Dispenser for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface CoinDispenserControl19 extends CoinDispenserControl18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournal.java b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournal.java
new file mode 100644
index 0000000..d2500b3
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournal.java
@@ -0,0 +1,2018 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ElectronicJournal.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class ElectronicJournal
+  extends BaseJposControl
+  implements ElectronicJournalControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected ElectronicJournalService110 service110;
+  protected ElectronicJournalService111 service111;
+  protected ElectronicJournalService112 service112;
+  protected ElectronicJournalService113 service113;
+  protected ElectronicJournalService114 service114;
+  protected Vector dataListeners;
+  protected Vector directIOListeners;
+  protected Vector errorListeners;
+  protected Vector outputCompleteListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public ElectronicJournal()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS ElectronicJournal Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service110 = null;
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    dataListeners = new Vector();
+    directIOListeners = new Vector();
+    errorListeners = new Vector();
+    outputCompleteListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapAddMarker()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapAddMarker();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapErasableMedium()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapErasableMedium();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapInitializeMedium()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapInitializeMedium();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapMediumIsAvailable()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapMediumIsAvailable();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapPrintContent()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapPrintContent();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapPrintContentFile()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapPrintContentFile();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRetrieveCurrentMarker()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapRetrieveCurrentMarker();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRetrieveMarker()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapRetrieveMarker();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRetrieveMarkerByDateTime()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapRetrieveMarkerByDateTime();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRetrieveMarkersDateTime()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapRetrieveMarkersDateTime();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapStation()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapStation();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStorageEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapStorageEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSuspendPrintContent()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapSuspendPrintContent();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSuspendQueryContent()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapSuspendQueryContent();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapWaterMark()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapWaterMark();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public boolean getAsyncMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getAsyncMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAsyncMode(boolean asyncMode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.setAsyncMode(asyncMode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getAutoDisable()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getAutoDisable();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAutoDisable(boolean autoDisable)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.setAutoDisable(autoDisable);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDataCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getDataCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getDataEventEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getDataEventEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDataEventEnabled(boolean dataEventEnabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.setDataEventEnabled(dataEventEnabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getFlagWhenIdle()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getFlagWhenIdle();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setFlagWhenIdle(boolean flagWhenIdle)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.setFlagWhenIdle(flagWhenIdle);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public long getMediumFreeSpace()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getMediumFreeSpace();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getMediumID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getMediumID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getMediumIsAvailable()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getMediumIsAvailable();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public long getMediumSize()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getMediumSize();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getOutputID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getOutputID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getStation()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getStation();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setStation(int station)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.setStation(station);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getStorageEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getStorageEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setStorageEnabled(boolean enabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.setStorageEnabled(enabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getSuspended()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getSuspended();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getWaterMark()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getWaterMark();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setWaterMark(boolean waterMark)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.setWaterMark(waterMark);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void addMarker(String marker)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.addMarker(marker);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void cancelPrintContent()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.cancelPrintContent();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void cancelQueryContent()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.cancelQueryContent();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearInput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.clearInput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearOutput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.clearOutput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void eraseMedium()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.eraseMedium();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void initializeMedium(String mediumID)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.initializeMedium(mediumID);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printContent(String fromMarker, String toMarker)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.printContent(fromMarker, toMarker);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printContentFile(String fileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.printContentFile(fileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void queryContent(String fileName, String fromMarker, String toMarker)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.queryContent(fileName, fromMarker, toMarker);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resumePrintContent()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.resumePrintContent();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resumeQueryContent()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.resumeQueryContent();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveCurrentMarker(int markerType, String[] marker)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.retrieveCurrentMarker(markerType, marker);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveMarker(int markerType, int sessionNumber, int documentNumber, String[] marker)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.retrieveMarker(markerType, sessionNumber, documentNumber, marker);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveMarkerByDateTime(int markerType, String dateTime, String markerNumber, String[] marker)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.retrieveMarkerByDateTime(markerType, dateTime, markerNumber, marker);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveMarkersDateTime(String marker, String[] dateTime)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.retrieveMarkersDateTime(marker, dateTime);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void suspendPrintContent()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.suspendPrintContent();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void suspendQueryContent()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.suspendQueryContent();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new ElectronicJournalCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service110 = null;
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion110)
+      {
+        try
+        {
+          service110 = (ElectronicJournalService110)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ElectronicJournalService110 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (ElectronicJournalService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ElectronicJournalService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (ElectronicJournalService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ElectronicJournalService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (ElectronicJournalService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ElectronicJournalService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (ElectronicJournalService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ElectronicJournalService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.addElement(l);
+    }
+  }
+
+  public void removeDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.removeElement(l);
+    }
+  }
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.addElement(l);
+    }
+  }
+
+  public void removeErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.removeElement(l);
+    }
+  }
+
+  public void addOutputCompleteListener(OutputCompleteListener l)
+  {
+    synchronized(outputCompleteListeners)
+    {
+      outputCompleteListeners.addElement(l);
+    }
+  }
+
+  public void removeOutputCompleteListener(OutputCompleteListener l)
+  {
+    synchronized(outputCompleteListeners)
+    {
+      outputCompleteListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class ElectronicJournalCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)ElectronicJournal.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+      synchronized(ElectronicJournal.this.dataListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < dataListeners.size(); x++)
+        {
+          ((DataListener)dataListeners.elementAt(x)).dataOccurred(e);
+        }
+      }
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(ElectronicJournal.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+      synchronized(ElectronicJournal.this.errorListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < errorListeners.size(); x++)
+        {
+          ((ErrorListener)errorListeners.elementAt(x)).errorOccurred(e);
+        }
+      }
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+      synchronized(ElectronicJournal.this.outputCompleteListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < outputCompleteListeners.size(); x++)
+        {
+          ((OutputCompleteListener)outputCompleteListeners.elementAt(x)).outputCompleteOccurred(e);
+        }
+      }
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(ElectronicJournal.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournal.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournal.manifest.stub
new file mode 100644
index 0000000..4dd3c98
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournal.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/ElectronicJournal.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournalBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournalBeanInfo.java
new file mode 100644
index 0000000..634a3a9
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournalBeanInfo.java
@@ -0,0 +1,121 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// ElectronicJournalBeanInfo.java - Bean information for the JavaPOS ElectronicJournal
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class ElectronicJournalBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.ElectronicJournal.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.ElectronicJournal.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapAddMarker"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapErasableMedium"),
+        makeProperty("CapInitializeMedium"),
+        makeProperty("CapMediumIsAvailable"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapPrintContent"),
+        makeProperty("CapPrintContentFile"),
+        makeProperty("CapRetrieveCurrentMarker"),
+        makeProperty("CapRetrieveMarker"),
+        makeProperty("CapRetrieveMarkerByDateTime"),
+        makeProperty("CapRetrieveMarkersDateTime"),
+        makeProperty("CapStation"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapStorageEnabled"),
+        makeProperty("CapSuspendPrintContent"),
+        makeProperty("CapSuspendQueryContent"),
+        makeProperty("CapUpdateFirmware"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapWaterMark"),
+
+        // Properties
+        makeProperty("AsyncMode"),
+        makeProperty("AutoDisable"),
+        makeProperty("DataCount"),
+        makeProperty("DataEventEnabled"),
+        makeProperty("FlagWhenIdle"),
+        makeProperty("MediumFreeSpace"),
+        makeProperty("MediumID"),
+        makeProperty("MediumIsAvailable"),
+        makeProperty("MediumSize"),
+        makeProperty("OutputID"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState"),
+        makeProperty("Station"),
+        makeProperty("StorageEnabled"),
+        makeProperty("Suspended"),
+        makeProperty("WaterMark"),
+
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.ElectronicJournal.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("Data"),
+        makeEvent("DirectIO"),
+        makeEvent("Error"),
+        makeEvent("OutputComplete"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournalConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournalConst.java
new file mode 100644
index 0000000..319e22a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournalConst.java
@@ -0,0 +1,83 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ElectronicJournalConst
+//
+//   Electronic Journal constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//   Added new StatusUpdateEvent constant:
+//       EJ_SUE_IDLE
+// 2008-Apr-21 JavaPOS Release 1.12.1                              BS
+//   Change value of EJ_SUE_IDLE to be the same value as used for
+//   printer idle SUEs (1001).
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface ElectronicJournalConst
+{
+  //###################################################################
+  //#### Electronic Journal Constants
+  //###################################################################
+
+  /////////////////////////////////////////////////////////////////////
+  // "CapStation", "Station" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int EJ_S_RECEIPT = 0x00000001;
+  public static final int EJ_S_SLIP    = 0x00000002;
+  public static final int EJ_S_JOURNAL = 0x00000004;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "retrieveCurrentMarker" Method, "markerType" Parameter Constants
+  // "retrieveMarker" Method, "markerType" Parameter Constants
+  // "retrieveMarkerByDateTime" Method, "markerType" Parameter Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int EJ_MT_SESSION_BEG = 1;
+  public static final int EJ_MT_SESSION_END = 2;
+  public static final int EJ_MT_DOCUMENT    = 3;
+  public static final int EJ_MT_HEAD        = 4;
+  public static final int EJ_MT_TAIL        = 5;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "ErrorEvent" "ErrorCodeExtended" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int JPOS_EEJ_EXISTING             = 1 + JposConst.JPOSERREXT;
+  public static final int JPOS_EEJ_MEDIUM_FULL          = 2 + JposConst.JPOSERREXT;
+  public static final int JPOS_EEJ_MULTIPLE_MARKER      = 3 + JposConst.JPOSERREXT;
+  public static final int JPOS_EEJ_UNINITIALIZED_MEDIUM = 4 + JposConst.JPOSERREXT;
+  public static final int JPOS_EEJ_CORRUPTED_MEDIUM     = 5 + JposConst.JPOSERREXT;
+  public static final int JPOS_EEJ_UNKNOWN_DATAFORMAT   = 6 + JposConst.JPOSERREXT;
+  public static final int JPOS_EEJ_NOT_ENOUGH_SPACE     = 7 + JposConst.JPOSERREXT;
+  public static final int JPOS_EEJ_MULTIPLE_MARKERS     = 8 + JposConst.JPOSERREXT;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "StatusUpdateEvent" "Status" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int EJ_SUE_MEDIUM_NEAR_FULL =    1;
+  public static final int EJ_SUE_MEDIUM_FULL      =    2;
+  public static final int EJ_SUE_MEDIUM_REMOVED   =    3;
+  public static final int EJ_SUE_MEDIUM_INSERTED  =    4;
+  public static final int EJ_SUE_SUSPENDED        =    5;
+  public static final int EJ_SUE_IDLE             = 1001; // 1.12.1
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournalControl110.java b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournalControl110.java
new file mode 100644
index 0000000..9aae638
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournalControl110.java
@@ -0,0 +1,148 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ElectronicJournalControl110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Electronic Journal for release
+//   1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ElectronicJournalControl110 extends BaseControl
+{
+  // Capabilities
+  public boolean getCapAddMarker() throws JposException;
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapErasableMedium() throws JposException;
+  public boolean getCapInitializeMedium() throws JposException;
+  public boolean getCapMediumIsAvailable() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public boolean getCapPrintContent() throws JposException;
+  public boolean getCapPrintContentFile() throws JposException;
+  public boolean getCapRetrieveCurrentMarker() throws JposException;
+  public boolean getCapRetrieveMarker() throws JposException;
+  public boolean getCapRetrieveMarkerByDateTime() throws JposException;
+  public boolean getCapRetrieveMarkersDateTime() throws JposException;
+  public int     getCapStation() throws JposException;
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapStorageEnabled() throws JposException;
+  public boolean getCapSuspendPrintContent() throws JposException;
+  public boolean getCapSuspendQueryContent() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+  public boolean getCapWaterMark() throws JposException;
+
+  // Properties
+  public boolean getAsyncMode() throws JposException;
+  public void    setAsyncMode(boolean asyncMode) throws JposException;
+  public boolean getAutoDisable() throws JposException;
+  public void    setAutoDisable(boolean autoDisable) throws JposException;
+  public int     getDataCount() throws JposException;
+  public boolean getDataEventEnabled() throws JposException;
+  public void    setDataEventEnabled(boolean dataEventEnabled)
+                     throws JposException;
+  public boolean getFlagWhenIdle() throws JposException;
+  public void    setFlagWhenIdle(boolean flagWhenIdle) throws JposException;
+  public long    getMediumFreeSpace() throws JposException;
+  public String  getMediumID() throws JposException;
+  public boolean getMediumIsAvailable() throws JposException;
+  public long    getMediumSize() throws JposException;
+  public int     getOutputID() throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+  public int     getStation() throws JposException;
+  public void    setStation(int station) throws JposException;
+  public boolean getStorageEnabled() throws JposException;
+  public void    setStorageEnabled(boolean enabled) throws JposException;
+  public boolean getSuspended() throws JposException;
+  public boolean getWaterMark() throws JposException;
+  public void    setWaterMark(boolean waterMark) throws JposException;
+
+  // Methods
+  public void    addMarker(String marker)
+                     throws JposException;
+  public void    cancelPrintContent()
+                     throws JposException;
+  public void    cancelQueryContent()
+                     throws JposException;
+  public void    clearInput() throws JposException;
+  public void    clearOutput() throws JposException;
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    eraseMedium()
+                     throws JposException;
+  public void    initializeMedium(String mediumID)
+                     throws JposException;
+  public void    printContent(String fromMarker,
+                              String toMarker)
+                     throws JposException;
+  public void    printContentFile(String fileName)
+                     throws JposException;
+  public void    queryContent(String fileName,
+                              String fromMarker,
+                              String toMarker)
+                     throws JposException;
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    resumePrintContent()
+                     throws JposException;
+  public void    resumeQueryContent()
+                     throws JposException;
+  public void    retrieveCurrentMarker(int markerType,
+                                       String[] marker)
+                     throws JposException;
+  public void    retrieveMarker(int markerType,
+                                int sessionNumber,
+                                int documentNumber,
+                                String[] marker)
+                     throws JposException;
+  public void    retrieveMarkerByDateTime(int markerType,
+                                          String dateTime,
+                                          String markerNumber,
+                                          String[] marker)
+                     throws JposException;
+  public void    retrieveMarkersDateTime(String marker,
+                                         String[] dateTime)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    suspendPrintContent()
+                     throws JposException;
+  public void    suspendQueryContent()
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+
+  // Event listener methods
+  public void    addDataListener(DataListener l);
+  public void    removeDataListener(DataListener l);
+  public void    addDirectIOListener(DirectIOListener l);
+  public void    removeDirectIOListener(DirectIOListener l);
+  public void    addErrorListener(ErrorListener l);
+  public void    removeErrorListener(ErrorListener l);
+  public void    addOutputCompleteListener(OutputCompleteListener l);
+  public void    removeOutputCompleteListener(OutputCompleteListener l);
+  public void    addStatusUpdateListener(StatusUpdateListener l);
+  public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournalControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournalControl111.java
new file mode 100644
index 0000000..b8b4640
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournalControl111.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ElectronicJournalControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Electronic Journal for release
+//   1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ElectronicJournalControl111 extends ElectronicJournalControl110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournalControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournalControl112.java
new file mode 100644
index 0000000..4b49986
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournalControl112.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ElectronicJournalControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Electronic Journal for release
+//   1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ElectronicJournalControl112 extends ElectronicJournalControl111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournalControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournalControl113.java
new file mode 100644
index 0000000..d402da1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournalControl113.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ElectronicJournalControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Electronic Journal for release
+//   1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ElectronicJournalControl113 extends ElectronicJournalControl112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournalControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournalControl114.java
new file mode 100644
index 0000000..2fec83e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicJournalControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ElectronicJournalControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Electronic Journal for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ElectronicJournalControl114 extends ElectronicJournalControl113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicValueRW.java b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicValueRW.java
new file mode 100644
index 0000000..d7dfde4
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicValueRW.java
@@ -0,0 +1,2947 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ElectronicValueRW.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class ElectronicValueRW
+  extends BaseJposControl
+  implements ElectronicValueRWControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected ElectronicValueRWService112 service112;
+  protected ElectronicValueRWService113 service113;
+  protected ElectronicValueRWService114 service114;
+  protected Vector dataListeners;
+  protected Vector directIOListeners;
+  protected Vector errorListeners;
+  protected Vector outputCompleteListeners;
+  protected Vector statusUpdateListeners;
+  protected Vector transitionListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public ElectronicValueRW()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS ElectronicValueRW Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    dataListeners = new Vector();
+    directIOListeners = new Vector();
+    errorListeners = new Vector();
+    outputCompleteListeners = new Vector();
+    statusUpdateListeners = new Vector();
+    transitionListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapActivateService()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapActivateService();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapAddValue()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapAddValue();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCancelValue()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapCancelValue();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapCardSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapCardSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapDetectionControl()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapDetectionControl();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapElectronicMoney()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapElectronicMoney();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapEnumerateCardServices()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapEnumerateCardServices();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapIndirectTransactionLog()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapIndirectTransactionLog();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapLockTerminal()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapLockTerminal();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapLogStatus()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapLogStatus();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapMediumID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapMediumID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapPoint()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapPoint();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRealTimeData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapRealTimeData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSubtractValue()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapSubtractValue();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapTransaction()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapTransaction();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapTransactionLog()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapTransactionLog();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUnlockTerminal()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapUnlockTerminal();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateKey()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapUpdateKey();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapVoucher()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapVoucher();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapWriteValue()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapWriteValue();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapPINDevice()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.14.0
+    if(serviceVersion < deviceVersion114)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.14.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service114.getCapPINDevice();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean CapTrainingMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.14.0
+    if(serviceVersion < deviceVersion114)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.14.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service114.CapTrainingMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public String getAccountNumber()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getAccountNumber();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getAdditionalSecurityInformation()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getAdditionalSecurityInformation();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAdditionalSecurityInformation(String addSecInfo)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setAdditionalSecurityInformation(addSecInfo);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public long getAmount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getAmount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAmount(long amount)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setAmount(amount);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getApprovalCode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getApprovalCode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setApprovalCode(String approvalCode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setApprovalCode(approvalCode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getAsyncMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getAsyncMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAsyncMode(boolean asyncMode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setAsyncMode(asyncMode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getAutoDisable()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getAutoDisable();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAutoDisable(boolean autoDisable)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setAutoDisable(autoDisable);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public long getBalance()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getBalance();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public long getBalanceOfPoint()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getBalanceOfPoint();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getCardServiceList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCardServiceList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getCurrentService()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCurrentService();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setCurrentService(String currentService)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setCurrentService(currentService);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDataCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getDataCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getDataEventEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getDataEventEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDataEventEnabled(boolean dataEventEnabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setDataEventEnabled(dataEventEnabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getDetectionControl()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getDetectionControl();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDetectionControl(boolean detectionControl)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setDetectionControl(detectionControl);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDetectionStatus()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getDetectionStatus();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getExpirationDate()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getExpirationDate();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getLastUsedDate()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getLastUsedDate();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getLogStatus()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getLogStatus();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getMediumID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getMediumID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setMediumID(String mediumID)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setMediumID(mediumID);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getOutputID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getOutputID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public long getPoint()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getPoint();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPoint(long point)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setPoint(point);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getReaderWriterServiceList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getReaderWriterServiceList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getSequenceNumber()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getSequenceNumber();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public long getSettledAmount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getSettledAmount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public long getSettledPoint()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getSettledPoint();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getTransactionLog()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getTransactionLog();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getVoucherID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getVoucherID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setVoucherID(String voucherID)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setVoucherID(voucherID);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getVoucherIDList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getVoucherIDList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setVoucherIDList(String voucherIDList)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setVoucherIDList(voucherIDList);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPINEntry()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.14.0
+    if(serviceVersion < deviceVersion114)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.14.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service114.getPINEntry();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPINEntry(int pinEntry)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.14.0
+    if(serviceVersion < deviceVersion114)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.14.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service114.setPINEntry(pinEntry);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getTrainingModeState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.14.0
+    if(serviceVersion < deviceVersion114)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.14.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service114.getTrainingModeState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setTrainingModeState(int trainingModeState)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.14.0
+    if(serviceVersion < deviceVersion114)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.14.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service114.setTrainingModeState(trainingModeState);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void accessLog(int sequenceNumber, int type, int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.accessLog(sequenceNumber, type, timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void activateService(int[] data, Object[] obj)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.activateService(data, obj);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void addValue(int sequenceNumber, int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.addValue(sequenceNumber, timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void beginDetection(int type, int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.beginDetection(type, timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void beginRemoval(int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.beginRemoval(timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void cancelValue(int sequenceNumber, int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.cancelValue(sequenceNumber, timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void captureCard()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.captureCard();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearInput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.clearInput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearInputProperties()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.clearInputProperties();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearOutput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.clearOutput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void endDetection()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.endDetection();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void endRemoval()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.endRemoval();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void enumerateCardServices()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.enumerateCardServices();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void lockTerminal()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.lockTerminal();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void readValue(int sequenceNumber, int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.readValue(sequenceNumber, timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void subtractValue(int sequenceNumber, int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.subtractValue(sequenceNumber, timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void transactionAccess(int control)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.transactionAccess(control);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void unlockTerminal()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.unlockTerminal();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateKey(int[] data, Object[] obj)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.updateKey(data, obj);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void writeValue(int sequenceNumber, int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.writeValue(sequenceNumber, timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearParameterInformation()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.14.0
+    if(serviceVersion < deviceVersion114)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.14.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service114.clearParameterInformation();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void queryLastSuccessfulTransactionResult()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.14.0
+    if(serviceVersion < deviceVersion114)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.14.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service114.queryLastSuccessfulTransactionResult();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveResultInformation(String name, String[] value)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.14.0
+    if(serviceVersion < deviceVersion114)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.14.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service114.retrieveResultInformation(name, value);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setParameterInformation(String name, String value)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.14.0
+    if(serviceVersion < deviceVersion114)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.14.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service114.setParameterInformation(name, value);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new ElectronicValueRWCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (ElectronicValueRWService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ElectronicValueRWService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (ElectronicValueRWService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ElectronicValueRWService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (ElectronicValueRWService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ElectronicValueRWService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.addElement(l);
+    }
+  }
+
+  public void removeDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.removeElement(l);
+    }
+  }
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.addElement(l);
+    }
+  }
+
+  public void removeErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.removeElement(l);
+    }
+  }
+
+  public void addOutputCompleteListener(OutputCompleteListener l)
+  {
+    synchronized(outputCompleteListeners)
+    {
+      outputCompleteListeners.addElement(l);
+    }
+  }
+
+  public void removeOutputCompleteListener(OutputCompleteListener l)
+  {
+    synchronized(outputCompleteListeners)
+    {
+      outputCompleteListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+  public void addTransitionListener(TransitionListener l)
+  {
+    synchronized(transitionListeners)
+    {
+      transitionListeners.addElement(l);
+    }
+  }
+
+  public void removeTransitionListener(TransitionListener l)
+  {
+    synchronized(transitionListeners)
+    {
+      transitionListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class ElectronicValueRWCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)ElectronicValueRW.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+      synchronized(ElectronicValueRW.this.dataListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < dataListeners.size(); x++)
+        {
+          ((DataListener)dataListeners.elementAt(x)).dataOccurred(e);
+        }
+      }
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(ElectronicValueRW.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+      synchronized(ElectronicValueRW.this.errorListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < errorListeners.size(); x++)
+        {
+          ((ErrorListener)errorListeners.elementAt(x)).errorOccurred(e);
+        }
+      }
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+      synchronized(ElectronicValueRW.this.outputCompleteListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < outputCompleteListeners.size(); x++)
+        {
+          ((OutputCompleteListener)outputCompleteListeners.elementAt(x)).outputCompleteOccurred(e);
+        }
+      }
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(ElectronicValueRW.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicValueRW.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicValueRW.manifest.stub
new file mode 100644
index 0000000..fa7d4d9
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicValueRW.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/ElectronicValueRW.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicValueRWBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicValueRWBeanInfo.java
new file mode 100644
index 0000000..063505e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicValueRWBeanInfo.java
@@ -0,0 +1,143 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// ElectronicValueRWBeanInfo.java - Bean information for the JavaPOS ElectronicValueRW
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class ElectronicValueRWBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.ElectronicValueRW.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.ElectronicValueRW.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapActivateService"),
+        makeProperty("CapAddValue"),
+        makeProperty("CapCancelValue"),
+        makeProperty("CapCardSensor"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapDetectionControl"),
+        makeProperty("CapElectronicMoney"),
+        makeProperty("CapEnumerateCardServices"),
+        makeProperty("CapIndirectTransactionLog"),
+        makeProperty("CapLockTerminal"),
+        makeProperty("CapLogStatus"),
+        makeProperty("CapMediumID"),
+        makeProperty("CapPoint"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapRealTimeData"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapSubtractValue"),
+        makeProperty("CapTransaction"),
+        makeProperty("CapTransactionLog"),
+        makeProperty("CapUnlockTerminal"),
+        makeProperty("CapUpdateFirmware"),
+        makeProperty("CapUpdateKey"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapVoucher"),
+        makeProperty("CapWriteValue"),
+        makeProperty("CapPINDevice"),
+        makeProperty("TrainingMode"),
+
+        // Properties
+        makeProperty("AccountNumber"),
+        makeProperty("AdditionalSecurityInformation"),
+        makeProperty("Amount"),
+        makeProperty("ApprovalCode"),
+        makeProperty("AsyncMode"),
+        makeProperty("AutoDisable"),
+        makeProperty("Balance"),
+        makeProperty("BalanceOfPoint"),
+        makeProperty("CardServiceList"),
+        makeProperty("CurrentService"),
+        makeProperty("DataCount"),
+        makeProperty("DataEventEnabled"),
+        makeProperty("DetectionControl"),
+        makeProperty("DetectionStatus"),
+        makeProperty("ExpirationDate"),
+        makeProperty("LastUsedDate"),
+        makeProperty("LogStatus"),
+        makeProperty("MediumID"),
+        makeProperty("OutputID"),
+        makeProperty("Point"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState"),
+        makeProperty("ReaderWriterServiceList"),
+        makeProperty("SequenceNumber"),
+        makeProperty("SettledAmount"),
+        makeProperty("SettledPoint"),
+        makeProperty("TransactionLog"),
+        makeProperty("VoucherID"),
+        makeProperty("VoucherIDList"),
+        makeProperty("PINEntry"),
+        makeProperty("TrainingModeState"),
+
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.ElectronicValueRW.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("Data"),
+        makeEvent("DirectIO"),
+        makeEvent("Error"),
+        makeEvent("OutputComplete"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicValueRWConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicValueRWConst.java
new file mode 100644
index 0000000..8213bf2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicValueRWConst.java
@@ -0,0 +1,293 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ElectronicValueRWConst
+//
+//   ElectronicValueRW constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//   New device category.
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//   Added new constants:
+//     EVRW_PIN_ENTRY_NONE
+//     EVRW_PIN_ENTRY_EXTERNAL
+//     EVRW_PIN_ENTRY_INTERNAL
+//     EVRW_PIN_ENTRY_UNKNOWN
+//     EVRW_TM_FALSE
+//     EVRW_TM_TRUE
+//     EVRW_TM_UNKNOWN
+//     EVRW_TAG_AS_AUTHENTICATED
+//     EVRW_TAG_AS_UNAUTHENTICATED
+//     EVRW_TAG_CTT_CANCEL
+//     EVRW_TAG_CTT_CHARGE
+//     EVRW_TAG_CTT_RETURN
+//     EVRW_TAG_CTT_SALES
+//     EVRW_TAG_CM_CASH
+//     EVRW_TAG_CM_CREDIT
+//     EVRW_TAG_CM_POINT
+//     EVRW_TAG_PC_INSTALLMENT_2
+//     EVRW_TAG_PC_INSTALLMENT_3
+//     EVRW_TAG_PC_BONUS_1
+//     EVRW_TAG_PC_BONUS_2
+//     EVRW_TAG_PC_BONUS_3
+//     EVRW_TAG_PC_BONUS_4
+//     EVRW_TAG_PC_BONUS_5
+//     EVRW_TAG_PC_BONUS_COMBINATION_1
+//     EVRW_TAG_PC_BONUS_COMBINATION_2
+//     EVRW_TAG_PC_BONUS_COMBINATION_3
+//     EVRW_TAG_PC_BONUS_COMBINATION_4
+//     EVRW_TAG_PC_INSTALLMENT_1
+//     EVRW_TAG_PC_LUMP
+//     EVRW_TAG_PC_REVOLVING
+//     EVRW_TAG_PM_COMBINED
+//     EVRW_TAG_PM_FULL_SETTLEMENT
+//     EVRW_TAG_PMFP_CASH
+//     EVRW_TAG_PMFP_CREDIT
+//     EVRW_TAG_PMFP_EM
+//     EVRW_TAG_PMFP_OTHER
+//     EVRW_TAG_ROS_NG
+//     EVRW_TAG_ROS_OK
+//     EVRW_TAG_ROS_UNKNOWN
+//     EVRW_TAG_STT_1
+//     EVRW_TAG_STT_2
+//     EVRW_TAG_STT_3
+//     EVRW_TAG_TT_ADD
+//     EVRW_TAG_TT_CANCEL_CHARGE
+//     EVRW_TAG_TT_CANCEL_RETURN
+//     EVRW_TAG_TT_CANCEL_SALES
+//     EVRW_TAG_TT_GET_LOG
+//     EVRW_TAG_TT_READ
+//     EVRW_TAG_TT_RETURN
+//     EVRW_TAG_TT_SUBTRACT
+//     EVRW_TAG_TT_WRITE
+//     EVRW_TE_NOTIFY_TOUCH_RETRY
+//     EVRW_TE_NOTIFY_TOUCH_RETRY_CANCELABLE
+//     EVRW_TE_CONFIRM_TOUCH_RETRY
+//     EVRW_TE_CONFIRM_CANCEL
+//     EVRW_TE_NOTIFY_INVALID_OPERATION
+//     EVRW_TE_CONFIRM_INVALID_OPERATION
+//     EVRW_TE_CONFIRM_REMAINDER_SUBTRACTION
+//     EVRW_TE_CONFIRM_CENTER_CHECK
+//     EVRW_TE_CONFIRM_TOUCH_TIMEOUT
+//     EVRW_TE_CONFIRM_AUTO_CHARGE
+//     EVRW_TE_NOTIFY_CAPTURE_CARD
+//     EVRW_TE_NOTIFY_PIN
+//     EVRW_TE_NOTIFY_CENTER_CHECK
+//     EVRW_TE_NOTIFY_COMPLETE
+//     EVRW_TE_NOTIFY_TOUCH
+//     EVRW_TE_NOTIFY_BUSY
+//     EVRW_TE_CONFIRM_CENTER_CHECK_COMPLETE
+//     EVRW_TE_CONFIRM_SELECT
+//     EVRW_TE_NOTIFY_LOCK
+//     EVRW_TE_NOTIFY_CENTER_CHECK_COMPLETE
+//     EVRW_TE_CONFIRM_PIN_ENTRY_BY_OUTER_PINPAD
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface ElectronicValueRWConst
+{
+  /////////////////////////////////////////////////////////////////////
+  // "CapCardSensor" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int EVRW_CCS_ENTRY               = 0x00000001;
+  public static final int EVRW_CCS_DETECT              = 0x00000002;
+  public static final int EVRW_CCS_CAPTURE             = 0x00000004;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "CapDetectionControl" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int EVRW_CDC_RWCONTROL           = 0x00000001;
+  public static final int EVRW_CDC_APPLICATIONCONTROL  = 0x00000002;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "DetectionStatus" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int EVRW_DS_NOCARD               = 1;
+  public static final int EVRW_DS_DETECTED             = 2;
+  public static final int EVRW_DS_ENTERED              = 3;
+  public static final int EVRW_DS_CAPTURED             = 4;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "LogStatus" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int EVRW_LS_OK                   = 1;
+  public static final int EVRW_LS_NEARFULL             = 2;
+  public static final int EVRW_LS_FULL                 = 3;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "PINEntry" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int EVRW_PIN_ENTRY_NONE          = 1; // Added in release 1.14
+  public static final int EVRW_PIN_ENTRY_EXTERNAL      = 2; // Added in release 1.14
+  public static final int EVRW_PIN_ENTRY_INTERNAL      = 3; // Added in release 1.14
+  public static final int EVRW_PIN_ENTRY_UNKNOWN       = 4; // Added in release 1.14
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "TrainingModeState" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int EVRW_TM_FALSE                = 1; // Added in release 1.14
+  public static final int EVRW_TM_TRUE                 = 2; // Added in release 1.14
+  public static final int EVRW_TM_UNKNOWN              = 3; // Added in release 1.14
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "accessLog" Method: "Type" Parameter Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int EVRW_AL_REPORTING            = 1;
+  public static final int EVRW_AL_SETTLEMENT           = 2;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "beginDetection" Method: "Type" Parameter Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int EVRW_BD_ANY                  = 1;
+  public static final int EVRW_BD_SPECIFIC             = 2;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "retrieveResultInformation" Method: "value" Parameter Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int EVRW_TAG_AS_AUTHENTICATED    = 1; // Added in release 1.14
+  public static final int EVRW_TAG_AS_UNAUTHENTICATED  = 2; // Added in release 1.14
+
+  public static final int EVRW_TAG_CTT_CANCEL          = 1; // Added in release 1.14
+  public static final int EVRW_TAG_CTT_CHARGE          = 2; // Added in release 1.14
+  public static final int EVRW_TAG_CTT_RETURN          = 3; // Added in release 1.14
+  public static final int EVRW_TAG_CTT_SALES           = 4; // Added in release 1.14
+
+  public static final int EVRW_TAG_CM_CASH             = 1; // Added in release 1.14
+  public static final int EVRW_TAG_CM_CREDIT           = 2; // Added in release 1.14
+  public static final int EVRW_TAG_CM_POINT            = 3; // Added in release 1.14
+
+  public static final int EVRW_TAG_PC_INSTALLMENT_1       =  1; // Added in release 1.14
+  public static final int EVRW_TAG_PC_INSTALLMENT_2       =  2; // Added in release 1.14
+  public static final int EVRW_TAG_PC_INSTALLMENT_3       =  3; // Added in release 1.14
+  public static final int EVRW_TAG_PC_BONUS_1             =  4; // Added in release 1.14
+  public static final int EVRW_TAG_PC_BONUS_2             =  5; // Added in release 1.14
+  public static final int EVRW_TAG_PC_BONUS_3             =  6; // Added in release 1.14
+  public static final int EVRW_TAG_PC_BONUS_4             =  7; // Added in release 1.14
+  public static final int EVRW_TAG_PC_BONUS_5             =  8; // Added in release 1.14
+  public static final int EVRW_TAG_PC_BONUS_COMBINATION_1 =  9; // Added in release 1.14
+  public static final int EVRW_TAG_PC_BONUS_COMBINATION_2 = 10; // Added in release 1.14
+  public static final int EVRW_TAG_PC_BONUS_COMBINATION_3 = 11; // Added in release 1.14
+  public static final int EVRW_TAG_PC_BONUS_COMBINATION_4 = 12; // Added in release 1.14
+  public static final int EVRW_TAG_PC_LUMP                = 13; // Added in release 1.14
+  public static final int EVRW_TAG_PC_REVOLVING           = 14; // Added in release 1.14
+
+  public static final int EVRW_TAG_PM_COMBINED         = 1; // Added in release 1.14
+  public static final int EVRW_TAG_PM_FULL_SETTLEMENT  = 2; // Added in release 1.14
+
+  public static final int EVRW_TAG_PMFP_CASH           = 1; // Added in release 1.14
+  public static final int EVRW_TAG_PMFP_CREDIT         = 2; // Added in release 1.14
+  public static final int EVRW_TAG_PMFP_EM             = 3; // Added in release 1.14
+  public static final int EVRW_TAG_PMFP_OTHER          = 4; // Added in release 1.14
+
+  public static final int EVRW_TAG_ROS_NG              = 1; // Added in release 1.14
+  public static final int EVRW_TAG_ROS_OK              = 2; // Added in release 1.14
+  public static final int EVRW_TAG_ROS_UNKNOWN         = 3; // Added in release 1.14
+
+  public static final int EVRW_TAG_STT_1               = 1; // Added in release 1.14
+  public static final int EVRW_TAG_STT_2               = 2; // Added in release 1.14
+  public static final int EVRW_TAG_STT_3               = 3; // Added in release 1.14
+
+  public static final int EVRW_TAG_TT_ADD              = 1; // Added in release 1.14
+  public static final int EVRW_TAG_TT_CANCEL_CHARGE    = 2; // Added in release 1.14
+  public static final int EVRW_TAG_TT_CANCEL_RETURN    = 3; // Added in release 1.14
+  public static final int EVRW_TAG_TT_CANCEL_SALES     = 4; // Added in release 1.14
+  public static final int EVRW_TAG_TT_GET_LOG          = 5; // Added in release 1.14
+  public static final int EVRW_TAG_TT_READ             = 6; // Added in release 1.14
+  public static final int EVRW_TAG_TT_RETURN           = 7; // Added in release 1.14
+  public static final int EVRW_TAG_TT_SUBTRACT         = 8; // Added in release 1.14
+  public static final int EVRW_TAG_TT_WRITE            = 9; // Added in release 1.14
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "transactionAccess" Method: "Control" Parameter Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int EVRW_TA_TRANSACTION          = 11;
+  public static final int EVRW_TA_NORMAL               = 12;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "StatusUpdateEvent" Event: "Data" Parameter Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int EVRW_SUE_LS_OK                  = 11;
+  public static final int EVRW_SUE_LS_NEARFULL            = 12;
+  public static final int EVRW_SUE_LS_FULL                = 13;
+  public static final int EVRW_SUE_DS_NOCARD              = 21;
+  public static final int EVRW_SUE_DS_DETECTED            = 22;
+  public static final int EVRW_SUE_DS_ENTERED             = 23;
+  public static final int EVRW_SUE_DS_CAPTURED            = 24;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "TransitionEvent" Event: "EventNumber" Parameter Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int EVRW_TE_NOTIFY_TOUCH_RETRY                =  1; // Added in release 1.14
+  public static final int EVRW_TE_NOTIFY_TOUCH_RETRY_CANCELABLE     =  2; // Added in release 1.14
+  public static final int EVRW_TE_CONFIRM_TOUCH_RETRY               =  3; // Added in release 1.14
+  public static final int EVRW_TE_CONFIRM_CANCEL                    =  4; // Added in release 1.14
+  public static final int EVRW_TE_NOTIFY_INVALID_OPERATION          =  5; // Added in release 1.14
+  public static final int EVRW_TE_CONFIRM_INVALID_OPERATION         =  6; // Added in release 1.14
+  public static final int EVRW_TE_CONFIRM_REMAINDER_SUBTRACTION     =  7; // Added in release 1.14
+  public static final int EVRW_TE_CONFIRM_CENTER_CHECK              =  8; // Added in release 1.14
+  public static final int EVRW_TE_CONFIRM_TOUCH_TIMEOUT             =  9; // Added in release 1.14
+  public static final int EVRW_TE_CONFIRM_AUTO_CHARGE               = 10; // Added in release 1.14
+  public static final int EVRW_TE_NOTIFY_CAPTURE_CARD               = 11; // Added in release 1.14
+  public static final int EVRW_TE_NOTIFY_PIN                        = 12; // Added in release 1.14
+  public static final int EVRW_TE_NOTIFY_CENTER_CHECK               = 13; // Added in release 1.14
+  public static final int EVRW_TE_NOTIFY_COMPLETE                   = 14; // Added in release 1.14
+  public static final int EVRW_TE_NOTIFY_TOUCH                      = 15; // Added in release 1.14
+  public static final int EVRW_TE_NOTIFY_BUSY                       = 16; // Added in release 1.14
+  public static final int EVRW_TE_CONFIRM_CENTER_CHECK_COMPLETE     = 17; // Added in release 1.14
+  public static final int EVRW_TE_CONFIRM_SELECT                    = 18; // Added in release 1.14
+  public static final int EVRW_TE_NOTIFY_LOCK                       = 19; // Added in release 1.14
+  public static final int EVRW_TE_NOTIFY_CENTER_CHECK_COMPLETE      = 20; // Added in release 1.14
+  public static final int EVRW_TE_CONFIRM_PIN_ENTRY_BY_OUTER_PINPAD = 21; // Added in release 1.14
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "ResultCodeExtended" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int OPOS_EVRW_NOCARD                = 201;
+  public static final int OPOS_EVRW_RELEASE               = 202;
+  public static final int OPOS_EVRW_CENTERERROR           = 203;
+  public static final int OPOS_EVRW_COMMANDERROR          = 204;
+  public static final int OPOS_EVRW_RESET                 = 205;
+  public static final int OPOS_EVRW_COMMUNICATIONERROR    = 206;
+  public static final int OPOS_EVRW_LOGOVERFLOW           = 207;
+  public static final int OPOS_EVRW_DAILYLOGOVERFLOW      = 208;
+  public static final int OPOS_EVRW_DEFICIENT             = 209;
+  public static final int OPOS_EVRW_OVERDEPOSIT           = 210;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicValueRWControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicValueRWControl112.java
new file mode 100644
index 0000000..80f5ef2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicValueRWControl112.java
@@ -0,0 +1,176 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ElectronicValueRWControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Electronic Value RW for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ElectronicValueRWControl112 extends BaseControl
+{
+  // Capabilities
+  public boolean getCapActivateService() throws JposException;
+  public boolean getCapAddValue() throws JposException;
+  public boolean getCapCancelValue() throws JposException;
+  public int     getCapCardSensor() throws JposException;
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public int     getCapDetectionControl() throws JposException;
+  public boolean getCapElectronicMoney() throws JposException;
+  public boolean getCapEnumerateCardServices() throws JposException;
+  public boolean getCapIndirectTransactionLog() throws JposException;
+  public boolean getCapLockTerminal() throws JposException;
+  public boolean getCapLogStatus() throws JposException;
+  public boolean getCapMediumID() throws JposException;
+  public boolean getCapPoint() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public boolean getCapRealTimeData() throws JposException;
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapSubtractValue() throws JposException;
+  public boolean getCapTransaction() throws JposException;
+  public boolean getCapTransactionLog() throws JposException;
+  public boolean getCapUnlockTerminal() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+  public boolean getCapUpdateKey() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+  public boolean getCapVoucher() throws JposException;
+  public boolean getCapWriteValue() throws JposException;
+
+  // Properties
+  public String  getAccountNumber() throws JposException;
+  public String  getAdditionalSecurityInformation() throws JposException;
+  public void    setAdditionalSecurityInformation(String addSecInfo) throws JposException;
+  public long    getAmount() throws JposException;
+  public void    setAmount(long amount) throws JposException;
+  public String  getApprovalCode() throws JposException;
+  public void    setApprovalCode(String approvalCode) throws JposException;
+  public boolean getAsyncMode() throws JposException;
+  public void    setAsyncMode(boolean asyncMode) throws JposException;
+  public boolean getAutoDisable() throws JposException;
+  public void    setAutoDisable(boolean autoDisable) throws JposException;
+  public long    getBalance() throws JposException;
+  public long    getBalanceOfPoint() throws JposException;
+  public String  getCardServiceList() throws JposException;
+  public String  getCurrentService() throws JposException;
+  public void    setCurrentService(String currentService) throws JposException;
+  public int     getDataCount() throws JposException;
+  public boolean getDataEventEnabled() throws JposException;
+  public void    setDataEventEnabled(boolean dataEventEnabled)
+                     throws JposException;
+  public boolean getDetectionControl() throws JposException;
+  public void    setDetectionControl(boolean detectionControl) throws JposException;
+  public int     getDetectionStatus() throws JposException;
+  public String  getExpirationDate() throws JposException;
+  public String  getLastUsedDate() throws JposException;
+  public int     getLogStatus() throws JposException;
+  public String  getMediumID() throws JposException;
+  public void    setMediumID(String mediumID) throws JposException;
+  public int     getOutputID() throws JposException;
+  public long    getPoint() throws JposException;
+  public void    setPoint(long point) throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+  public String  getReaderWriterServiceList() throws JposException;
+  public int     getSequenceNumber() throws JposException;
+  public long    getSettledAmount() throws JposException;
+  public long    getSettledPoint() throws JposException;
+  public String  getTransactionLog() throws JposException;
+  public String  getVoucherID() throws JposException;
+  public void    setVoucherID(String voucherID) throws JposException;
+  public String  getVoucherIDList() throws JposException;
+  public void    setVoucherIDList(String voucherIDList) throws JposException;
+
+  // Methods
+  public void    accessLog(int sequenceNumber,
+                           int type,
+                           int timeout)
+                     throws JposException;
+  public void    activateService(int[] data,
+                                 Object[] obj)
+                     throws JposException;
+  public void    addValue(int sequenceNumber, int timeout)
+                     throws JposException;
+  public void    beginDetection(int type,
+                                int timeout)
+                     throws JposException;
+  public void    beginRemoval(int timeout)
+                     throws JposException;
+  public void    cancelValue(int sequenceNumber,
+                             int timeout)
+                     throws JposException;
+  public void    captureCard()
+                     throws JposException;
+  public void    clearInput()
+                     throws JposException;
+  public void    clearInputProperties()
+                     throws JposException;
+  public void    clearOutput()
+                     throws JposException;
+  public void    compareFirmwareVersion(String firmwareFileName,
+                                        int[] result)
+                     throws JposException;
+  public void    endDetection()
+                     throws JposException;
+  public void    endRemoval()
+                     throws JposException;
+  public void    enumerateCardServices()
+                     throws JposException;
+  public void    lockTerminal()
+                     throws JposException;
+  public void    readValue(int sequenceNumber,
+                           int timeout)
+                     throws JposException;
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    subtractValue(int sequenceNumber,
+                               int timeout)
+                     throws JposException;
+  public void    transactionAccess(int control)
+                     throws JposException;
+  public void    unlockTerminal()
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+  public void    updateKey(int[] data,
+                           Object[] obj)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    writeValue(int sequenceNumber,
+                            int timeout)
+                     throws JposException;
+
+  // Event listener methods
+  public void    addDataListener(DataListener l);
+  public void    removeDataListener(DataListener l);
+  public void    addDirectIOListener(DirectIOListener l);
+  public void    removeDirectIOListener(DirectIOListener l);
+  public void    addErrorListener(ErrorListener l);
+  public void    removeErrorListener(ErrorListener l);
+  public void    addOutputCompleteListener(OutputCompleteListener l);
+  public void    removeOutputCompleteListener(OutputCompleteListener l);
+  public void    addStatusUpdateListener(StatusUpdateListener l);
+  public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicValueRWControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicValueRWControl113.java
new file mode 100644
index 0000000..f0cc201
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicValueRWControl113.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ElectronicValueRWControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Electronic Value RW for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ElectronicValueRWControl113 extends ElectronicValueRWControl112
+{
+  // Nothing new added for release 1.13
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicValueRWControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicValueRWControl114.java
new file mode 100644
index 0000000..824f030
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ElectronicValueRWControl114.java
@@ -0,0 +1,51 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ElectronicValueRWControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Electronic Value RW for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ElectronicValueRWControl114 extends ElectronicValueRWControl113
+{
+  // Capabilities
+  public boolean getCapPINDevice() throws JposException;
+  public boolean CapTrainingMode() throws JposException;
+
+  // Properties
+  public int     getPINEntry() throws JposException;
+  public void    setPINEntry(int pinEntry) throws JposException;
+  public int     getTrainingModeState() throws JposException;
+  public void    setTrainingModeState(int trainingModeState) throws JposException;
+
+  // Methods
+  public void    clearParameterInformation() throws JposException;
+  public void    queryLastSuccessfulTransactionResult() throws JposException;
+  public void    retrieveResultInformation(String   name,
+                                           String[] value) throws JposException;
+  public void    setParameterInformation(String name,
+                                         String value) throws JposException;
+
+  // Event listener methods
+  public void    addTransitionListener(TransitionListener l);
+  public void    removeTransitionListener(TransitionListener l);
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinter.java b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinter.java
new file mode 100644
index 0000000..465dc92
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinter.java
@@ -0,0 +1,5699 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// FiscalPrinter.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class FiscalPrinter
+  extends BaseJposControl
+  implements FiscalPrinterControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected FiscalPrinterService13 service13;
+  protected FiscalPrinterService14 service14;
+  protected FiscalPrinterService15 service15;
+  protected FiscalPrinterService16 service16;
+  protected FiscalPrinterService17 service17;
+  protected FiscalPrinterService18 service18;
+  protected FiscalPrinterService19 service19;
+  protected FiscalPrinterService110 service110;
+  protected FiscalPrinterService111 service111;
+  protected FiscalPrinterService112 service112;
+  protected FiscalPrinterService113 service113;
+  protected FiscalPrinterService114 service114;
+  protected Vector directIOListeners;
+  protected Vector errorListeners;
+  protected Vector outputCompleteListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public FiscalPrinter()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS FiscalPrinter Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service13 = null;
+    //service14 = null;
+    //service15 = null;
+    //service16 = null;
+    //service17 = null;
+    //service18 = null;
+    //service19 = null;
+    //service110 = null;
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    directIOListeners = new Vector();
+    errorListeners = new Vector();
+    outputCompleteListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapAdditionalLines()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapAdditionalLines();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapAmountAdjustment()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapAmountAdjustment();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapAmountNotPaid()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapAmountNotPaid();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCheckTotal()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapCheckTotal();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCoverSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapCoverSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapDoubleWidth()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapDoubleWidth();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapDuplicateReceipt()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapDuplicateReceipt();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapFixedOutput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapFixedOutput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapHasVatTable()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapHasVatTable();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapIndependentHeader()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapIndependentHeader();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapItemList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapItemList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapJrnEmptySensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapJrnEmptySensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapJrnNearEndSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapJrnNearEndSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapJrnPresent()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapJrnPresent();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapNonFiscalMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapNonFiscalMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapOrderAdjustmentFirst()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapOrderAdjustmentFirst();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapPercentAdjustment()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapPercentAdjustment();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapPositiveAdjustment()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapPositiveAdjustment();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapPowerLossReport()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapPowerLossReport();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapPredefinedPaymentLines()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapPredefinedPaymentLines();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapReceiptNotPaid()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapReceiptNotPaid();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRecEmptySensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapRecEmptySensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRecNearEndSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapRecNearEndSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRecPresent()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapRecPresent();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRemainingFiscalMemory()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapRemainingFiscalMemory();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapReservedWord()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapReservedWord();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSetHeader()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapSetHeader();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSetPOSID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapSetPOSID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSetStoreFiscalID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapSetStoreFiscalID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSetTrailer()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapSetTrailer();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSetVatTable()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapSetVatTable();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSlpEmptySensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapSlpEmptySensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSlpFiscalDocument()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapSlpFiscalDocument();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSlpFullSlip()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapSlpFullSlip();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSlpNearEndSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapSlpNearEndSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSlpPresent()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapSlpPresent();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSlpValidation()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapSlpValidation();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSubAmountAdjustment()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapSubAmountAdjustment();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSubPercentAdjustment()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapSubPercentAdjustment();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSubtotal()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapSubtotal();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapTrainingMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapTrainingMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapValidateJournal()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapValidateJournal();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapXReport()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapXReport();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapAdditionalHeader()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getCapAdditionalHeader();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapAdditionalTrailer()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getCapAdditionalTrailer();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapChangeDue()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getCapChangeDue();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapEmptyReceiptIsVoidable()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getCapEmptyReceiptIsVoidable();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapFiscalReceiptStation()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getCapFiscalReceiptStation();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapFiscalReceiptType()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getCapFiscalReceiptType();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapMultiContractor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getCapMultiContractor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapOnlyVoidLastItem()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getCapOnlyVoidLastItem();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapPackageAdjustment()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getCapPackageAdjustment();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapPostPreLine()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getCapPostPreLine();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSetCurrency()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getCapSetCurrency();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapTotalizerType()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getCapTotalizerType();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapPositiveSubtotalAdjustment()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.11.0
+    if(serviceVersion < deviceVersion111)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.11.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapPositiveSubtotalAdjustment();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public int getAmountDecimalPlace()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getAmountDecimalPlace();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getAsyncMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getAsyncMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAsyncMode(boolean asyncMode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setAsyncMode(asyncMode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCheckTotal()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCheckTotal();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setCheckTotal(boolean checkTotal)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setCheckTotal(checkTotal);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCountryCode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCountryCode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCoverOpen()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCoverOpen();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getDayOpened()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getDayOpened();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDescriptionLength()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getDescriptionLength();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getDuplicateReceipt()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getDuplicateReceipt();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDuplicateReceipt(boolean duplicateReceipt)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setDuplicateReceipt(duplicateReceipt);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getErrorLevel()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getErrorLevel();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getErrorOutID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getErrorOutID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getErrorState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getErrorState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getErrorStation()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getErrorStation();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getErrorString()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getErrorString();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getFlagWhenIdle()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getFlagWhenIdle();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setFlagWhenIdle(boolean flagWhenIdle)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setFlagWhenIdle(flagWhenIdle);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getJrnEmpty()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getJrnEmpty();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getJrnNearEnd()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getJrnNearEnd();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getMessageLength()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getMessageLength();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getNumHeaderLines()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getNumHeaderLines();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getNumTrailerLines()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getNumTrailerLines();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getNumVatRates()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getNumVatRates();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getOutputID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getOutputID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getPredefinedPaymentLines()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPredefinedPaymentLines();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPrinterState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPrinterState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getQuantityDecimalPlaces()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getQuantityDecimalPlaces();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getQuantityLength()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getQuantityLength();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getRecEmpty()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getRecEmpty();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getRecNearEnd()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getRecNearEnd();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getRemainingFiscalMemory()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getRemainingFiscalMemory();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getReservedWord()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getReservedWord();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getSlpEmpty()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getSlpEmpty();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getSlpNearEnd()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getSlpNearEnd();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getSlipSelection()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getSlipSelection();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setSlipSelection(int slipSelection)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setSlipSelection(slipSelection);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getTrainingModeActive()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getTrainingModeActive();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getActualCurrency()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getActualCurrency();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getAdditionalHeader()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getAdditionalHeader();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAdditionalHeader(String additionalHeader)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service16.setAdditionalHeader(additionalHeader);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getAdditionalTrailer()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getAdditionalTrailer();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAdditionalTrailer(String additionalTrailer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service16.setAdditionalTrailer(additionalTrailer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getChangeDue()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getChangeDue();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setChangeDue(String changeDue)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service16.setChangeDue(changeDue);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getContractorId()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getContractorId();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setContractorId(int contractorId)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service16.setContractorId(contractorId);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDateType()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getDateType();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDateType(int dateType)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service16.setDateType(dateType);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getFiscalReceiptStation()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getFiscalReceiptStation();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setFiscalReceiptStation(int fiscalReceiptStation)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service16.setFiscalReceiptStation(fiscalReceiptStation);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getFiscalReceiptType()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getFiscalReceiptType();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setFiscalReceiptType(int fiscalReceiptType)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service16.setFiscalReceiptType(fiscalReceiptType);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getMessageType()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getMessageType();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setMessageType(int messageType)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service16.setMessageType(messageType);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getPostLine()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getPostLine();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPostLine(String postLine)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service16.setPostLine(postLine);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getPreLine()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getPreLine();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPreLine(String preLine)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service16.setPreLine(preLine);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getTotalizerType()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getTotalizerType();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setTotalizerType(int totalizerType)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service16.setTotalizerType(totalizerType);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getAmountDecimalPlaces()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.7.0
+    if(serviceVersion < deviceVersion17)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.7.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getAmountDecimalPlaces();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void beginFiscalDocument(int documentAmount)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.beginFiscalDocument(documentAmount);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void beginFiscalReceipt(boolean printHeader)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.beginFiscalReceipt(printHeader);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void beginFixedOutput(int station, int documentType)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.beginFixedOutput(station, documentType);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void beginInsertion(int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.beginInsertion(timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void beginItemList(int vatID)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.beginItemList(vatID);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void beginNonFiscal()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.beginNonFiscal();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void beginRemoval(int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.beginRemoval(timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void beginTraining()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.beginTraining();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearError()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.clearError();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearOutput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.clearOutput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void endFiscalDocument()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.endFiscalDocument();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void endFiscalReceipt(boolean printHeader)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.endFiscalReceipt(printHeader);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void endFixedOutput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.endFixedOutput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void endInsertion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.endInsertion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void endItemList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.endItemList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void endNonFiscal()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.endNonFiscal();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void endRemoval()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.endRemoval();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void endTraining()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.endTraining();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void getData(int dataItem, int[] optArgs, String[] data)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.getData(dataItem, optArgs, data);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void getDate(String[] Date)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.getDate(Date);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void getTotalizer(int vatID, int optArgs, String[] data)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.getTotalizer(vatID, optArgs, data);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void getVatEntry(int vatID, int optArgs, int[] vatRate)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.getVatEntry(vatID, optArgs, vatRate);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printDuplicateReceipt()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.printDuplicateReceipt();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printFiscalDocumentLine(String documentLine)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.printFiscalDocumentLine(documentLine);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printFixedOutput(int documentType, int lineNumber, String data)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.printFixedOutput(documentType, lineNumber, data);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printNormal(int station, String data)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.printNormal(station, data);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printPeriodicTotalsReport(String date1, String date2)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.printPeriodicTotalsReport(date1, date2);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printPowerLossReport()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.printPowerLossReport();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printRecItem(String description, long price, int quantity, int vatInfo, long unitPrice, String unitName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.printRecItem(description, price, quantity, vatInfo, unitPrice, unitName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printRecItemAdjustment(int adjustmentType, String description, long amount, int vatInfo)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.printRecItemAdjustment(adjustmentType, description, amount, vatInfo);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printRecMessage(String message)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.printRecMessage(message);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printRecNotPaid(String description, long amount)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.printRecNotPaid(description, amount);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printRecRefund(String description, long amount, int vatInfo)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.printRecRefund(description, amount, vatInfo);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printRecSubtotal(long amount)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.printRecSubtotal(amount);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printRecSubtotalAdjustment(int adjustmentType, String description, long amount)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.printRecSubtotalAdjustment(adjustmentType, description, amount);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printRecTotal(long total, long payment, String description)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.printRecTotal(total, payment, description);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printRecVoid(String description)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.printRecVoid(description);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printRecVoidItem(String description, long amount, int quantity, int adjustmentType, long adjustment, int vatInfo)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.printRecVoidItem(description, amount, quantity, adjustmentType, adjustment, vatInfo);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printReport(int reportType, String startNum, String endNum)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.printReport(reportType, startNum, endNum);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printXReport()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.printXReport();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printZReport()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.printZReport();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetPrinter()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.resetPrinter();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDate(String date)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setDate(date);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setHeaderLine(int lineNumber, String text, boolean doubleWidth)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setHeaderLine(lineNumber, text, doubleWidth);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPOSID(String POSID, String cashierID)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setPOSID(POSID, cashierID);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setStoreFiscalID(String ID)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setStoreFiscalID(ID);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setTrailerLine(int lineNumber, String text, boolean doubleWidth)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setTrailerLine(lineNumber, text, doubleWidth);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setVatTable()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setVatTable();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setVatValue(int vatID, String vatValue)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setVatValue(vatID, vatValue);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void verifyItem(String itemName, int vatID)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.verifyItem(itemName, vatID);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setCurrency(int newCurrency)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service16.setCurrency(newCurrency);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printRecCash(long amount)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service16.printRecCash(amount);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printRecItemFuel(String description, long price, int quantity, int vatInfo, long unitPrice, String unitName, long specialTax, String specialTaxName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service16.printRecItemFuel(description, price, quantity, vatInfo, unitPrice, unitName, specialTax, specialTaxName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printRecItemFuelVoid(String description, long price, int vatInfo, long specialTax)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service16.printRecItemFuelVoid(description, price, vatInfo, specialTax);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printRecPackageAdjustment(int adjustmentType, String description, String vatAdjustment)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service16.printRecPackageAdjustment(adjustmentType, description, vatAdjustment);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printRecPackageAdjustVoid(int adjustmentType, String vatAdjustment)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service16.printRecPackageAdjustVoid(adjustmentType, vatAdjustment);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printRecRefundVoid(String description, long amount, int vatInfo)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service16.printRecRefundVoid(description, amount, vatInfo);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printRecSubtotalAdjustVoid(int adjustmentType, long amount)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service16.printRecSubtotalAdjustVoid(adjustmentType, amount);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printRecTaxID(String taxID)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service16.printRecTaxID(taxID);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printRecItemVoid(String description, long price, int quantity, int vatInfo, long unitPrice, String unitName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.11.0
+    if(serviceVersion < deviceVersion111)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.11.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.printRecItemVoid(description, price, quantity, vatInfo, unitPrice, unitName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printRecItemAdjustmentVoid(int adjustmentType, String description, long amount, int vatInfo)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.11.0
+    if(serviceVersion < deviceVersion111)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.11.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.printRecItemAdjustmentVoid(adjustmentType, description, amount, vatInfo);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printRecItemRefund(String description, long amount, int quantity, int vatInfo, long unitAmount, String unitName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.printRecItemRefund(description, amount, quantity, vatInfo, unitAmount, unitName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printRecItemRefundVoid(String description, long amount, int quantity, int vatInfo, long unitAmount, String unitName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.printRecItemRefundVoid(description, amount, quantity, vatInfo, unitAmount, unitName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new FiscalPrinterCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service13 = null;
+      service14 = null;
+      service15 = null;
+      service16 = null;
+      service17 = null;
+      service18 = null;
+      service19 = null;
+      service110 = null;
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion13)
+      {
+        try
+        {
+          service13 = (FiscalPrinterService13)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement FiscalPrinterService13 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion14)
+      {
+        try
+        {
+          service14 = (FiscalPrinterService14)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement FiscalPrinterService14 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion15)
+      {
+        try
+        {
+          service15 = (FiscalPrinterService15)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement FiscalPrinterService15 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion16)
+      {
+        try
+        {
+          service16 = (FiscalPrinterService16)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement FiscalPrinterService16 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion17)
+      {
+        try
+        {
+          service17 = (FiscalPrinterService17)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement FiscalPrinterService17 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion18)
+      {
+        try
+        {
+          service18 = (FiscalPrinterService18)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement FiscalPrinterService18 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion19)
+      {
+        try
+        {
+          service19 = (FiscalPrinterService19)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement FiscalPrinterService19 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion110)
+      {
+        try
+        {
+          service110 = (FiscalPrinterService110)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement FiscalPrinterService110 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (FiscalPrinterService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement FiscalPrinterService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (FiscalPrinterService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement FiscalPrinterService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (FiscalPrinterService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement FiscalPrinterService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (FiscalPrinterService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement FiscalPrinterService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.addElement(l);
+    }
+  }
+
+  public void removeErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.removeElement(l);
+    }
+  }
+
+  public void addOutputCompleteListener(OutputCompleteListener l)
+  {
+    synchronized(outputCompleteListeners)
+    {
+      outputCompleteListeners.addElement(l);
+    }
+  }
+
+  public void removeOutputCompleteListener(OutputCompleteListener l)
+  {
+    synchronized(outputCompleteListeners)
+    {
+      outputCompleteListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class FiscalPrinterCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)FiscalPrinter.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(FiscalPrinter.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+      synchronized(FiscalPrinter.this.errorListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < errorListeners.size(); x++)
+        {
+          ((ErrorListener)errorListeners.elementAt(x)).errorOccurred(e);
+        }
+      }
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+      synchronized(FiscalPrinter.this.outputCompleteListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < outputCompleteListeners.size(); x++)
+        {
+          ((OutputCompleteListener)outputCompleteListeners.elementAt(x)).outputCompleteOccurred(e);
+        }
+      }
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(FiscalPrinter.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinter.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinter.manifest.stub
new file mode 100644
index 0000000..bffefde
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinter.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/FiscalPrinter.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterBeanInfo.java
new file mode 100644
index 0000000..4ae157f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterBeanInfo.java
@@ -0,0 +1,192 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// FiscalPrinterBeanInfo.java - Bean information for the JavaPOS FiscalPrinter
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class FiscalPrinterBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.FiscalPrinter.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.FiscalPrinter.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapAdditionalLines"),
+        makeProperty("CapAmountAdjustment"),
+        makeProperty("CapAmountNotPaid"),
+        makeProperty("CapCheckTotal"),
+        makeProperty("CapCoverSensor"),
+        makeProperty("CapDoubleWidth"),
+        makeProperty("CapDuplicateReceipt"),
+        makeProperty("CapFixedOutput"),
+        makeProperty("CapHasVatTable"),
+        makeProperty("CapIndependentHeader"),
+        makeProperty("CapItemList"),
+        makeProperty("CapJrnEmptySensor"),
+        makeProperty("CapJrnNearEndSensor"),
+        makeProperty("CapJrnPresent"),
+        makeProperty("CapNonFiscalMode"),
+        makeProperty("CapOrderAdjustmentFirst"),
+        makeProperty("CapPercentAdjustment"),
+        makeProperty("CapPositiveAdjustment"),
+        makeProperty("CapPowerLossReport"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapPredefinedPaymentLines"),
+        makeProperty("CapReceiptNotPaid"),
+        makeProperty("CapRecEmptySensor"),
+        makeProperty("CapRecNearEndSensor"),
+        makeProperty("CapRecPresent"),
+        makeProperty("CapRemainingFiscalMemory"),
+        makeProperty("CapReservedWord"),
+        makeProperty("CapSetHeader"),
+        makeProperty("CapSetPOSID"),
+        makeProperty("CapSetStoreFiscalID"),
+        makeProperty("CapSetTrailer"),
+        makeProperty("CapSetVatTable"),
+        makeProperty("CapSlpEmptySensor"),
+        makeProperty("CapSlpFiscalDocument"),
+        makeProperty("CapSlpFullSlip"),
+        makeProperty("CapSlpNearEndSensor"),
+        makeProperty("CapSlpPresent"),
+        makeProperty("CapSlpValidation"),
+        makeProperty("CapSubAmountAdjustment"),
+        makeProperty("CapSubPercentAdjustment"),
+        makeProperty("CapSubtotal"),
+        makeProperty("CapTrainingMode"),
+        makeProperty("CapValidateJournal"),
+        makeProperty("CapXReport"),
+        makeProperty("CapAdditionalHeader"),
+        makeProperty("CapAdditionalTrailer"),
+        makeProperty("CapChangeDue"),
+        makeProperty("CapEmptyReceiptIsVoidable"),
+        makeProperty("CapFiscalReceiptStation"),
+        makeProperty("CapFiscalReceiptType"),
+        makeProperty("CapMultiContractor"),
+        makeProperty("CapOnlyVoidLastItem"),
+        makeProperty("CapPackageAdjustment"),
+        makeProperty("CapPostPreLine"),
+        makeProperty("CapSetCurrency"),
+        makeProperty("CapTotalizerType"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapUpdateFirmware"),
+        makeProperty("CapPositiveSubtotalAdjustment"),
+
+        // Properties
+        makeProperty("AmountDecimalPlace"),
+        makeProperty("AsyncMode"),
+        makeProperty("CheckTotal"),
+        makeProperty("CountryCode"),
+        makeProperty("CoverOpen"),
+        makeProperty("DayOpened"),
+        makeProperty("DescriptionLength"),
+        makeProperty("DuplicateReceipt"),
+        makeProperty("ErrorLevel"),
+        makeProperty("ErrorOutID"),
+        makeProperty("ErrorState"),
+        makeProperty("ErrorStation"),
+        makeProperty("ErrorString"),
+        makeProperty("FlagWhenIdle"),
+        makeProperty("JrnEmpty"),
+        makeProperty("JrnNearEnd"),
+        makeProperty("MessageLength"),
+        makeProperty("NumHeaderLines"),
+        makeProperty("NumTrailerLines"),
+        makeProperty("NumVatRates"),
+        makeProperty("OutputID"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState"),
+        makeProperty("PredefinedPaymentLines"),
+        makeProperty("PrinterState"),
+        makeProperty("QuantityDecimalPlaces"),
+        makeProperty("QuantityLength"),
+        makeProperty("RecEmpty"),
+        makeProperty("RecNearEnd"),
+        makeProperty("RemainingFiscalMemory"),
+        makeProperty("ReservedWord"),
+        makeProperty("SlpEmpty"),
+        makeProperty("SlpNearEnd"),
+        makeProperty("SlipSelection"),
+        makeProperty("TrainingModeActive"),
+        makeProperty("ActualCurrency"),
+        makeProperty("AdditionalHeader"),
+        makeProperty("AdditionalTrailer"),
+        makeProperty("ChangeDue"),
+        makeProperty("ContractorId"),
+        makeProperty("DateType"),
+        makeProperty("FiscalReceiptStation"),
+        makeProperty("FiscalReceiptType"),
+        makeProperty("MessageType"),
+        makeProperty("PostLine"),
+        makeProperty("PreLine"),
+        makeProperty("TotalizerType"),
+        makeProperty("AmountDecimalPlaces")
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.FiscalPrinter.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("DirectIO"),
+        makeEvent("Error"),
+        makeEvent("OutputComplete"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterConst.java
new file mode 100644
index 0000000..607f593
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterConst.java
@@ -0,0 +1,455 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// FiscalPrinterConst
+//
+//   Fiscal Printer constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20    JavaPOS Release 1.3                                 BS
+// 16-Apr-2003 Release 1.7.2: Added the missing constant           BS
+//               FPTR_SC_EURO.
+// 03-Jun-2003 JavaPOS Release 1.8                                 BS
+//               Added new StatusUpdateEvent constants.
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//   Added new ActualCurrency constants:
+//       FPTR_AC_CZK
+//       FPTR_AC_UAH
+//       FPTR_AC_OTHER
+//   Added new CountryCode constants:
+//       FPTR_CC_CZECH_REPUBLIC
+//       FPTR_CC_UKRAINE
+//       FPTR_CC_OTHER
+//   Added new DateType constant:
+//       FPTR_DT_START
+//   Added new FiscalReceiptType constant:
+//       FPTR_RT_REFUND
+//   Added new AdjustmentType constants:
+//       FPTR_AT_COUPON_AMOUNT_DISCOUNT
+//       FPTR_AT_COUPON_PERCENTAGE_DISCOUNT
+//   Added new ReportType constant:
+//       FPTR_RT_EOD_ORDINAL
+//   Added new ErrorCodeExtended constant:
+//       JPOS_EFPTR_DAY_END_REQUIRED
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface FiscalPrinterConst
+{
+    /////////////////////////////////////////////////////////////////////
+    // Fiscal Printer Station Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int FPTR_S_JOURNAL                   = 1;
+    public static final int FPTR_S_RECEIPT                   = 2;
+    public static final int FPTR_S_SLIP                      = 4;
+
+    public static final int FPTR_S_JOURNAL_RECEIPT = FPTR_S_JOURNAL | FPTR_S_RECEIPT;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "ActualCurrency" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int FPTR_AC_BRC                      =  1;
+    public static final int FPTR_AC_BGL                      =  2;
+    public static final int FPTR_AC_EUR                      =  3;
+    public static final int FPTR_AC_GRD                      =  4;
+    public static final int FPTR_AC_HUF                      =  5;
+    public static final int FPTR_AC_ITL                      =  6;
+    public static final int FPTR_AC_PLZ                      =  7;
+    public static final int FPTR_AC_ROL                      =  8;
+    public static final int FPTR_AC_RUR                      =  9;
+    public static final int FPTR_AC_TRL                      =  10;
+    public static final int FPTR_AC_CZK                      =  11; // 1.11
+    public static final int FPTR_AC_UAH                      =  12; // 1.11
+    public static final int FPTR_AC_OTHER                    = 200; // 1.11
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "ContractorId" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int FPTR_CID_FIRST                   =  1;
+    public static final int FPTR_CID_SECOND                  =  2;
+    public static final int FPTR_CID_SINGLE                  =  3;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "CountryCode" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int FPTR_CC_BRAZIL                   = 0x00000001;
+    public static final int FPTR_CC_GREECE                   = 0x00000002;
+    public static final int FPTR_CC_HUNGARY                  = 0x00000004;
+    public static final int FPTR_CC_ITALY                    = 0x00000008;
+    public static final int FPTR_CC_POLAND                   = 0x00000010;
+    public static final int FPTR_CC_TURKEY                   = 0x00000020;
+    public static final int FPTR_CC_RUSSIA                   = 0x00000040;
+    public static final int FPTR_CC_BULGARIA                 = 0x00000080;
+    public static final int FPTR_CC_ROMANIA                  = 0x00000100;
+    public static final int FPTR_CC_CZECH_REPUBLIC           = 0x00000200; // 1.11
+    public static final int FPTR_CC_UKRAINE                  = 0x00000400; // 1.11
+    public static final int FPTR_CC_OTHER                    = 0x40000000; // 1.11
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "DateType" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int FPTR_DT_CONF                     =  1;
+    public static final int FPTR_DT_EOD                      =  2;
+    public static final int FPTR_DT_RESET                    =  3;
+    public static final int FPTR_DT_RTC                      =  4;
+    public static final int FPTR_DT_VAT                      =  5;
+    public static final int FPTR_DT_START                    =  6; // 1.11
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "ErrorLevel" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int FPTR_EL_NONE                     =  1;
+    public static final int FPTR_EL_RECOVERABLE              =  2;
+    public static final int FPTR_EL_FATAL                    =  3;
+    public static final int FPTR_EL_BLOCKED                  =  4;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "ErrorState", "PrinterState" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int FPTR_PS_MONITOR                  =  1;
+    public static final int FPTR_PS_FISCAL_RECEIPT           =  2;
+    public static final int FPTR_PS_FISCAL_RECEIPT_TOTAL     =  3;
+    public static final int FPTR_PS_FISCAL_RECEIPT_ENDING    =  4;
+    public static final int FPTR_PS_FISCAL_DOCUMENT          =  5;
+    public static final int FPTR_PS_FIXED_OUTPUT             =  6;
+    public static final int FPTR_PS_ITEM_LIST                =  7;
+    public static final int FPTR_PS_LOCKED                   =  8;
+    public static final int FPTR_PS_NONFISCAL                =  9;
+    public static final int FPTR_PS_REPORT                   = 10;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "FiscalReceiptStation" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int FPTR_RS_RECEIPT                  =  1;
+    public static final int FPTR_RS_SLIP                     =  2;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "FiscalReceiptType" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int FPTR_RT_CASH_IN                  =  1;
+    public static final int FPTR_RT_CASH_OUT                 =  2;
+    public static final int FPTR_RT_GENERIC                  =  3;
+    public static final int FPTR_RT_SALES                    =  4;
+    public static final int FPTR_RT_SERVICE                  =  5;
+    public static final int FPTR_RT_SIMPLE_INVOICE           =  6;
+    public static final int FPTR_RT_REFUND                   =  7; // 1.11
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "MessageType" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int FPTR_MT_ADVANCE                  =  1;
+    public static final int FPTR_MT_ADVANCE_PAID             =  2;
+    public static final int FPTR_MT_AMOUNT_TO_BE_PAID        =  3;
+    public static final int FPTR_MT_AMOUNT_TO_BE_PAID_BACK   =  4;
+    public static final int FPTR_MT_CARD                     =  5;
+    public static final int FPTR_MT_CARD_NUMBER              =  6;
+    public static final int FPTR_MT_CARD_TYPE                =  7;
+    public static final int FPTR_MT_CASH                     =  8;
+    public static final int FPTR_MT_CASHIER                  =  9;
+    public static final int FPTR_MT_CASH_REGISTER_NUMBER     =  10;
+    public static final int FPTR_MT_CHANGE                   =  11;
+    public static final int FPTR_MT_CHEQUE                   =  12;
+    public static final int FPTR_MT_CLIENT_NUMBER            =  13;
+    public static final int FPTR_MT_CLIENT_SIGNATURE         =  14;
+    public static final int FPTR_MT_COUNTER_STATE            =  15;
+    public static final int FPTR_MT_CREDIT_CARD              =  16;
+    public static final int FPTR_MT_CURRENCY                 =  17;
+    public static final int FPTR_MT_CURRENCY_VALUE           =  18;
+    public static final int FPTR_MT_DEPOSIT                  =  19;
+    public static final int FPTR_MT_DEPOSIT_RETURNED         =  20;
+    public static final int FPTR_MT_DOT_LINE                 =  21;
+    public static final int FPTR_MT_DRIVER_NUMB              =  22;
+    public static final int FPTR_MT_EMPTY_LINE               =  23;
+    public static final int FPTR_MT_FREE_TEXT                =  24;
+    public static final int FPTR_MT_FREE_TEXT_WITH_DAY_LIMIT =  25;
+    public static final int FPTR_MT_GIVEN_DISCOUNT           =  26;
+    public static final int FPTR_MT_LOCAL_CREDIT             =  27;
+    public static final int FPTR_MT_MILEAGE_KM               =  28;
+    public static final int FPTR_MT_NOTE                     =  29;
+    public static final int FPTR_MT_PAID                     =  30;
+    public static final int FPTR_MT_PAY_IN                   =  31;
+    public static final int FPTR_MT_POINT_GRANTED            =  32;
+    public static final int FPTR_MT_POINTS_BONUS             =  33;
+    public static final int FPTR_MT_POINTS_RECEIPT           =  34;
+    public static final int FPTR_MT_POINTS_TOTAL             =  35;
+    public static final int FPTR_MT_PROFITED                 =  36;
+    public static final int FPTR_MT_RATE                     =  37;
+    public static final int FPTR_MT_REGISTER_NUMB            =  38;
+    public static final int FPTR_MT_SHIFT_NUMBER             =  39;
+    public static final int FPTR_MT_STATE_OF_AN_ACCOUNT      =  40;
+    public static final int FPTR_MT_SUBSCRIPTION             =  41;
+    public static final int FPTR_MT_TABLE                    =  42;
+    public static final int FPTR_MT_THANK_YOU_FOR_LOYALTY    =  43;
+    public static final int FPTR_MT_TRANSACTION_NUMB         =  44;
+    public static final int FPTR_MT_VALID_TO                 =  45;
+    public static final int FPTR_MT_VOUCHER                  =  46;
+    public static final int FPTR_MT_VOUCHER_PAID             =  47;
+    public static final int FPTR_MT_VOUCHER_VALUE            =  48;
+    public static final int FPTR_MT_WITH_DISCOUNT            =  49;
+    public static final int FPTR_MT_WITHOUT_UPLIFT           =  50;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "SlipSelection" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int FPTR_SS_FULL_LENGTH              =  1;
+    public static final int FPTR_SS_VALIDATION               =  2;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "TotalizerType" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int FPTR_TT_DOCUMENT                 =  1;
+    public static final int FPTR_TT_DAY                      =  2;
+    public static final int FPTR_TT_RECEIPT                  =  3;
+    public static final int FPTR_TT_GRAND                    =  4;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "GetData" Method Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int FPTR_GD_CURRENT_TOTAL            =  1;
+    public static final int FPTR_GD_DAILY_TOTAL              =  2;
+    public static final int FPTR_GD_RECEIPT_NUMBER           =  3;
+    public static final int FPTR_GD_REFUND                   =  4;
+    public static final int FPTR_GD_NOT_PAID                 =  5;
+    public static final int FPTR_GD_MID_VOID                 =  6;
+    public static final int FPTR_GD_Z_REPORT                 =  7;
+    public static final int FPTR_GD_GRAND_TOTAL              =  8;
+    public static final int FPTR_GD_PRINTER_ID               =  9;
+    public static final int FPTR_GD_FIRMWARE                 = 10;
+    public static final int FPTR_GD_RESTART                  = 11;
+    public static final int FPTR_GD_REFUND_VOID              = 12;
+    public static final int FPTR_GD_NUMB_CONFIG_BLOCK        = 13;
+    public static final int FPTR_GD_NUMB_CURRENCY_BLOCK      = 14;
+    public static final int FPTR_GD_NUMB_HDR_BLOCK           = 15;
+    public static final int FPTR_GD_NUMB_RESET_BLOCK         = 16;
+    public static final int FPTR_GD_NUMB_VAT_BLOCK           = 17;
+    public static final int FPTR_GD_FISCAL_DOC               = 18;
+    public static final int FPTR_GD_FISCAL_DOC_VOID          = 19;
+    public static final int FPTR_GD_FISCAL_REC               = 20;
+    public static final int FPTR_GD_FISCAL_REC_VOID          = 21;
+    public static final int FPTR_GD_NONFISCAL_DOC            = 22;
+    public static final int FPTR_GD_NONFISCAL_DOC_VOID       = 23;
+    public static final int FPTR_GD_NONFISCAL_REC            = 24;
+    public static final int FPTR_GD_SIMP_INVOICE             = 25;
+    public static final int FPTR_GD_TENDER                   = 26;
+    public static final int FPTR_GD_LINECOUNT                = 27;
+    public static final int FPTR_GD_DESCRIPTION_LENGTH       = 28;
+
+    public static final int FPTR_PDL_CASH                     =  1;
+    public static final int FPTR_PDL_CHEQUE                   =  2;
+    public static final int FPTR_PDL_CHITTY                   =  3;
+    public static final int FPTR_PDL_COUPON                   =  4;
+    public static final int FPTR_PDL_CURRENCY                 =  5;
+    public static final int FPTR_PDL_DRIVEN_OFF               =  6;
+    public static final int FPTR_PDL_EFT_IMPRINTER            =  7;
+    public static final int FPTR_PDL_EFT_TERMINAL             =  8;
+    public static final int FPTR_PDL_TERMINAL_IMPRINTER       =  9;
+    public static final int FPTR_PDL_FREE_GIFT                = 10;
+    public static final int FPTR_PDL_GIRO                     = 11;
+    public static final int FPTR_PDL_HOME                     = 12;
+    public static final int FPTR_PDL_IMPRINTER_WITH_ISSUER    = 13;
+    public static final int FPTR_PDL_LOCAL_ACCOUNT            = 14;
+    public static final int FPTR_PDL_LOCAL_ACCOUNT_CARD       = 15;
+    public static final int FPTR_PDL_PAY_CARD                 = 16;
+    public static final int FPTR_PDL_PAY_CARD_MANUAL          = 17;
+    public static final int FPTR_PDL_PREPAY                   = 18;
+    public static final int FPTR_PDL_PUMP_TEST                = 19;
+    public static final int FPTR_PDL_SHORT_CREDIT             = 20;
+    public static final int FPTR_PDL_STAFF                    = 21;
+    public static final int FPTR_PDL_VOUCHER                  = 22;
+
+    public static final int FPTR_LC_ITEM                      =  1;
+    public static final int FPTR_LC_ITEM_VOID                 =  2;
+    public static final int FPTR_LC_DISCOUNT                  =  3;
+    public static final int FPTR_LC_DISCOUNT_VOID             =  4;
+    public static final int FPTR_LC_SURCHARGE                 =  5;
+    public static final int FPTR_LC_SURCHARGE_VOID            =  6;
+    public static final int FPTR_LC_REFUND                    =  7;
+    public static final int FPTR_LC_REFUND_VOID               =  8;
+    public static final int FPTR_LC_SUBTOTAL_DISCOUNT         =  9;
+    public static final int FPTR_LC_SUBTOTAL_DISCOUNT_VOID    = 10;
+    public static final int FPTR_LC_SUBTOTAL_SURCHARGE        = 11;
+    public static final int FPTR_LC_SUBTOTAL_SURCHARGE_VOID   = 12;
+    public static final int FPTR_LC_COMMENT                   = 13;
+    public static final int FPTR_LC_SUBTOTAL                  = 14;
+    public static final int FPTR_LC_TOTAL                     = 15;
+
+    public static final int FPTR_DL_ITEM                      =  1;
+    public static final int FPTR_DL_ITEM_ADJUSTMENT           =  2;
+    public static final int FPTR_DL_ITEM_FUEL                 =  3;
+    public static final int FPTR_DL_ITEM_FUEL_VOID            =  4;
+    public static final int FPTR_DL_NOT_PAID                  =  5;
+    public static final int FPTR_DL_PACKAGE_ADJUSTMENT        =  6;
+    public static final int FPTR_DL_REFUND                    =  7;
+    public static final int FPTR_DL_REFUND_VOID               =  8;
+    public static final int FPTR_DL_SUBTOTAL_ADJUSTMENT       =  9;
+    public static final int FPTR_DL_TOTAL                     = 10;
+    public static final int FPTR_DL_VOID                      = 11;
+    public static final int FPTR_DL_VOID_ITEM                 = 12;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "GetTotalizer" Method Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int FPTR_GT_GROSS                    =  1;
+    public static final int FPTR_GT_NET                      =  2;
+    public static final int FPTR_GT_DISCOUNT                 =  3;
+    public static final int FPTR_GT_DISCOUNT_VOID            =  4;
+    public static final int FPTR_GT_ITEM                     =  5;
+    public static final int FPTR_GT_ITEM_VOID                =  6;
+    public static final int FPTR_GT_NOT_PAID                 =  7;
+    public static final int FPTR_GT_REFUND                   =  8;
+    public static final int FPTR_GT_REFUND_VOID              =  9;
+    public static final int FPTR_GT_SUBTOTAL_DISCOUNT        =  10;
+    public static final int FPTR_GT_SUBTOTAL_DISCOUNT_VOID   =  11;
+    public static final int FPTR_GT_SUBTOTAL_SURCHARGES      =  12;
+    public static final int FPTR_GT_SUBTOTAL_SURCHARGES_VOID =  13;
+    public static final int FPTR_GT_SURCHARGE                =  14;
+    public static final int FPTR_GT_SURCHARGE_VOID           =  15;
+    public static final int FPTR_GT_VAT                      =  16;
+    public static final int FPTR_GT_VAT_CATEGORY             =  17;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "AdjustmentType" arguments in diverse methods
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int FPTR_AT_AMOUNT_DISCOUNT            =  1;
+    public static final int FPTR_AT_AMOUNT_SURCHARGE           =  2;
+    public static final int FPTR_AT_PERCENTAGE_DISCOUNT        =  3;
+    public static final int FPTR_AT_PERCENTAGE_SURCHARGE       =  4;
+    public static final int FPTR_AT_COUPON_AMOUNT_DISCOUNT     =  5; // 1.11
+    public static final int FPTR_AT_COUPON_PERCENTAGE_DISCOUNT =  6; // 1.11
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "ReportType" argument in "PrintReport" method
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int FPTR_RT_ORDINAL                  =  1;
+    public static final int FPTR_RT_DATE                     =  2;
+    public static final int FPTR_RT_EOD_ORDINAL              =  3; // 1.11
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "NewCurrency" argument in "SetCurrency" method
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int FPTR_SC_EURO                     =  1;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "StatusUpdateEvent" Event: "Data" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int FPTR_SUE_COVER_OPEN              =  11;
+    public static final int FPTR_SUE_COVER_OK                =  12;
+
+    public static final int FPTR_SUE_JRN_EMPTY               =  21;
+    public static final int FPTR_SUE_JRN_NEAREMPTY           =  22;
+    public static final int FPTR_SUE_JRN_PAPEROK             =  23;
+
+    public static final int FPTR_SUE_REC_EMPTY               =  24;
+    public static final int FPTR_SUE_REC_NEAREMPTY           =  25;
+    public static final int FPTR_SUE_REC_PAPEROK             =  26;
+
+    public static final int FPTR_SUE_SLP_EMPTY               =  27;
+    public static final int FPTR_SUE_SLP_NEAREMPTY           =  28;
+    public static final int FPTR_SUE_SLP_PAPEROK             =  29;
+
+    public static final int FPTR_SUE_IDLE                    =1001;
+
+    // Added in Release 1.8
+    public static final int FPTR_SUE_JRN_COVER_OPEN          =  60;
+    public static final int FPTR_SUE_JRN_COVER_OK            =  61;
+    public static final int FPTR_SUE_REC_COVER_OPEN          =  62;
+    public static final int FPTR_SUE_REC_COVER_OK            =  63;
+    public static final int FPTR_SUE_SLP_COVER_OPEN          =  64;
+    public static final int FPTR_SUE_SLP_COVER_OK            =  65;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "ErrorCodeExtended" Property Constants for Fiscal Printer
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int JPOS_EFPTR_COVER_OPEN = 1 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EFPTR_JRN_EMPTY  = 2 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EFPTR_REC_EMPTY  = 3 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EFPTR_SLP_EMPTY  = 4 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EFPTR_SLP_FORM   = 5 + JposConst.JPOSERREXT; // EndRemoval
+    public static final int JPOS_EFPTR_MISSING_DEVICES            =
+            6 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EFPTR_WRONG_STATE                =
+            7 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EFPTR_TECHNICAL_ASSISTANCE       =
+            8 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EFPTR_CLOCK_ERROR                =
+            9 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EFPTR_FISCAL_MEMORY_FULL         =
+            10 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EFPTR_FISCAL_MEMORY_DISCONNECTED =
+            11 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EFPTR_FISCAL_TOTALS_ERROR        =
+            12 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EFPTR_BAD_ITEM_QUANTITY          =
+            13 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EFPTR_BAD_ITEM_AMOUNT            =
+            14 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EFPTR_BAD_ITEM_DESCRIPTION       =
+            15 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EFPTR_RECEIPT_TOTAL_OVERFLOW     =
+            16 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EFPTR_BAD_VAT                    =
+            17 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EFPTR_BAD_PRICE                  =
+            18 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EFPTR_BAD_DATE                   =
+            19 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EFPTR_NEGATIVE_TOTAL             =
+            20 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EFPTR_WORD_NOT_ALLOWED           =
+            21 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EFPTR_BAD_LENGTH                 =
+            22 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EFPTR_MISSING_SET_CURRENCY       =
+            23 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EFPTR_DAY_END_REQUIRED           =
+            24 + JposConst.JPOSERREXT; // (Several)                 // 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl110.java b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl110.java
new file mode 100644
index 0000000..fb69e55
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl110.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// FiscalPrinterControl110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Fiscal Printer for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface FiscalPrinterControl110 extends FiscalPrinterControl19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl111.java
new file mode 100644
index 0000000..04e0213
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl111.java
@@ -0,0 +1,46 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// FiscalPrinterControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Fiscal Printer for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface FiscalPrinterControl111 extends FiscalPrinterControl110
+{
+  // Capabilities
+  public boolean getCapPositiveSubtotalAdjustment() throws JposException;
+
+  // Methods
+  public void    printRecItemVoid(String description,
+                                  long price,
+                                  int quantity,
+                                  int vatInfo,
+                                  long unitPrice,
+                                  String unitName)
+                     throws JposException;
+  public void    printRecItemAdjustmentVoid(int adjustmentType,
+                                            String description,
+                                            long amount,
+                                            int vatInfo)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl112.java
new file mode 100644
index 0000000..f763d41
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl112.java
@@ -0,0 +1,45 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// FiscalPrinterControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Fiscal Printer for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface FiscalPrinterControl112 extends FiscalPrinterControl111
+{
+  // Methods
+  public void    printRecItemRefund(String description,
+                                    long amount,
+                                    int quantity,
+                                    int vatInfo,
+                                    long unitAmount,
+                                    String unitName)
+                     throws JposException;
+  public void    printRecItemRefundVoid(String description,
+                                        long amount,
+                                        int quantity,
+                                        int vatInfo,
+                                        long unitAmount,
+                                        String unitName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl113.java
new file mode 100644
index 0000000..ce17daf
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// FiscalPrinterControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Fiscal Printer for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface FiscalPrinterControl113 extends FiscalPrinterControl112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl114.java
new file mode 100644
index 0000000..9d69303
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// FiscalPrinterControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Fiscal Printer for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface FiscalPrinterControl114 extends FiscalPrinterControl113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl13.java b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl13.java
new file mode 100644
index 0000000..6f89d87
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl13.java
@@ -0,0 +1,204 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// FiscalPrinterControl13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Fiscal Printer for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface FiscalPrinterControl13 extends BaseControl
+{
+    // Capabilities
+    public boolean getCapAdditionalLines() throws JposException;
+    public boolean getCapAmountAdjustment() throws JposException;
+    public boolean getCapAmountNotPaid() throws JposException;
+    public boolean getCapCheckTotal() throws JposException;
+    public boolean getCapCoverSensor() throws JposException;
+    public boolean getCapDoubleWidth() throws JposException;
+    public boolean getCapDuplicateReceipt() throws JposException;
+    public boolean getCapFixedOutput() throws JposException;
+    public boolean getCapHasVatTable() throws JposException;
+    public boolean getCapIndependentHeader() throws JposException;
+    public boolean getCapItemList() throws JposException;
+    public boolean getCapJrnEmptySensor() throws JposException;
+    public boolean getCapJrnNearEndSensor() throws JposException;
+    public boolean getCapJrnPresent() throws JposException;
+    public boolean getCapNonFiscalMode() throws JposException;
+    public boolean getCapOrderAdjustmentFirst() throws JposException;
+    public boolean getCapPercentAdjustment() throws JposException;
+    public boolean getCapPositiveAdjustment() throws JposException;
+    public boolean getCapPowerLossReport() throws JposException;
+    public int     getCapPowerReporting() throws JposException;
+    public boolean getCapPredefinedPaymentLines() throws JposException;
+    public boolean getCapReceiptNotPaid() throws JposException;
+    public boolean getCapRecEmptySensor() throws JposException;
+    public boolean getCapRecNearEndSensor() throws JposException;
+    public boolean getCapRecPresent() throws JposException;
+    public boolean getCapRemainingFiscalMemory() throws JposException;
+    public boolean getCapReservedWord() throws JposException;
+    public boolean getCapSetHeader() throws JposException;
+    public boolean getCapSetPOSID() throws JposException;
+    public boolean getCapSetStoreFiscalID() throws JposException;
+    public boolean getCapSetTrailer() throws JposException;
+    public boolean getCapSetVatTable() throws JposException;
+    public boolean getCapSlpEmptySensor() throws JposException;
+    public boolean getCapSlpFiscalDocument() throws JposException;
+    public boolean getCapSlpFullSlip() throws JposException;
+    public boolean getCapSlpNearEndSensor() throws JposException;
+    public boolean getCapSlpPresent() throws JposException;
+    public boolean getCapSlpValidation() throws JposException;
+    public boolean getCapSubAmountAdjustment() throws JposException;
+    public boolean getCapSubPercentAdjustment() throws JposException;
+    public boolean getCapSubtotal() throws JposException;
+    public boolean getCapTrainingMode() throws JposException;
+    public boolean getCapValidateJournal() throws JposException;
+    public boolean getCapXReport() throws JposException;
+
+    // Properties
+    public int     getAmountDecimalPlace() throws JposException;
+    public boolean getAsyncMode() throws JposException;
+    public void    setAsyncMode(boolean asyncMode) throws JposException;
+    public boolean getCheckTotal() throws JposException;
+    public void    setCheckTotal(boolean checkTotal) throws JposException;
+    public int     getCountryCode() throws JposException;
+    public boolean getCoverOpen() throws JposException;
+    public boolean getDayOpened() throws JposException;
+    public int     getDescriptionLength() throws JposException;
+    public boolean getDuplicateReceipt() throws JposException;
+    public void    setDuplicateReceipt(boolean duplicateReceipt) throws JposException;
+    public int     getErrorLevel() throws JposException;
+    public int     getErrorOutID() throws JposException;
+    public int     getErrorState() throws JposException;
+    public int     getErrorStation() throws JposException;
+    public String  getErrorString() throws JposException;
+    public boolean getFlagWhenIdle() throws JposException;
+    public void    setFlagWhenIdle(boolean flagWhenIdle) throws JposException;
+    public boolean getJrnEmpty() throws JposException;
+    public boolean getJrnNearEnd() throws JposException;
+    public int     getMessageLength() throws JposException;
+    public int     getNumHeaderLines() throws JposException;
+    public int     getNumTrailerLines() throws JposException;
+    public int     getNumVatRates() throws JposException;
+    public int     getOutputID() throws JposException;
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+    public String  getPredefinedPaymentLines() throws JposException;
+    public int     getPrinterState() throws JposException;
+    public int     getQuantityDecimalPlaces() throws JposException;
+    public int     getQuantityLength() throws JposException;
+    public boolean getRecEmpty() throws JposException;
+    public boolean getRecNearEnd() throws JposException;
+    public int     getRemainingFiscalMemory() throws JposException;
+    public String  getReservedWord() throws JposException;
+    public boolean getSlpEmpty() throws JposException;
+    public boolean getSlpNearEnd() throws JposException;
+    public int     getSlipSelection() throws JposException;
+    public void    setSlipSelection(int slipSelection) throws JposException;
+    public boolean getTrainingModeActive() throws JposException;
+
+    // Methods
+    public void    beginFiscalDocument(int documentAmount)
+                       throws JposException;
+    public void    beginFiscalReceipt(boolean printHeader)
+                       throws JposException;
+    public void    beginFixedOutput(int station, int documentType)
+                       throws JposException;
+    public void    beginInsertion(int timeout) throws JposException;
+    public void    beginItemList(int vatID) throws JposException;
+    public void    beginNonFiscal() throws JposException;
+    public void    beginRemoval(int timeout) throws JposException;
+    public void    beginTraining() throws JposException;
+    public void    clearError() throws JposException;
+    public void    clearOutput() throws JposException;
+    public void    endFiscalDocument() throws JposException;
+    public void    endFiscalReceipt(boolean printHeader) throws JposException;
+    public void    endFixedOutput() throws JposException;
+    public void    endInsertion() throws JposException;
+    public void    endItemList() throws JposException;
+    public void    endNonFiscal() throws JposException;
+    public void    endRemoval() throws JposException;
+    public void    endTraining() throws JposException;
+    public void    getData(int dataItem, int[] optArgs, String[] data)
+                       throws JposException;
+    public void    getDate(String[] Date) throws JposException;
+    public void    getTotalizer(int vatID, int optArgs, String[] data)
+                       throws JposException;
+    public void    getVatEntry(int vatID, int optArgs, int[] vatRate)
+                       throws JposException;
+    public void    printDuplicateReceipt() throws JposException;
+    public void    printFiscalDocumentLine(String documentLine)
+                       throws JposException;
+    public void    printFixedOutput(int documentType, int lineNumber,
+                       String data) throws JposException;
+    public void    printNormal(int station, String data) throws JposException;
+    public void    printPeriodicTotalsReport(String date1, String date2)
+                       throws JposException;
+    public void    printPowerLossReport() throws JposException;
+    public void    printRecItem(String description, long price, int quantity,
+                       int vatInfo, long unitPrice, String unitName)
+                       throws JposException;
+    public void    printRecItemAdjustment(int adjustmentType,
+                       String description, long amount, int vatInfo)
+                       throws JposException;
+    public void    printRecMessage(String message) throws JposException;
+    public void    printRecNotPaid(String description, long amount)
+                       throws JposException;
+    public void    printRecRefund(String description, long amount, int vatInfo)
+                       throws JposException;
+    public void    printRecSubtotal(long amount) throws JposException;
+    public void    printRecSubtotalAdjustment(int adjustmentType,
+                       String description, long amount) throws JposException;
+    public void    printRecTotal(long total, long payment, String description)
+                       throws JposException;
+    public void    printRecVoid(String description) throws JposException;
+    public void    printRecVoidItem(String description, long amount,
+                       int quantity, int adjustmentType, long adjustment,
+                       int vatInfo) throws JposException;
+    public void    printReport(int reportType, String startNum, String endNum)
+                       throws JposException;
+    public void    printXReport() throws JposException;
+    public void    printZReport() throws JposException;
+    public void    resetPrinter() throws JposException;
+    public void    setDate(String date) throws JposException;
+    public void    setHeaderLine(int lineNumber, String text,
+                       boolean doubleWidth) throws JposException;
+    public void    setPOSID(String POSID, String cashierID)
+                       throws JposException;
+    public void    setStoreFiscalID(String ID) throws JposException;
+    public void    setTrailerLine(int lineNumber, String text,
+                       boolean doubleWidth) throws JposException;
+    public void    setVatTable() throws JposException;
+    public void    setVatValue(int vatID, String vatValue)
+                       throws JposException;
+    public void    verifyItem(String itemName, int vatID) throws JposException;
+
+    // Event listener methods
+    public void    addDirectIOListener(DirectIOListener l);
+    public void    removeDirectIOListener(DirectIOListener l);
+    public void    addErrorListener(ErrorListener l);
+    public void    removeErrorListener(ErrorListener l);
+    public void    addOutputCompleteListener(OutputCompleteListener l);
+    public void    removeOutputCompleteListener(OutputCompleteListener l);
+    public void    addStatusUpdateListener(StatusUpdateListener l);
+    public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl14.java b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl14.java
new file mode 100644
index 0000000..a4c78d3
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// FiscalPrinterControl14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Fiscal Printer for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface FiscalPrinterControl14 extends FiscalPrinterControl13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl15.java b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl15.java
new file mode 100644
index 0000000..c5e43f4
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl15.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// FiscalPrinterControl15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Fiscal Printer for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 00-04-17 JavaPOS Release 1.5                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface FiscalPrinterControl15 extends FiscalPrinterControl14
+{
+  // Nothing new added for release 1.5
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl16.java b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl16.java
new file mode 100644
index 0000000..11c9452
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl16.java
@@ -0,0 +1,92 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// FiscalPrinterControl16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Fiscal Printer for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-04-18 JavaPOS Release 1.6                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface FiscalPrinterControl16 extends FiscalPrinterControl15
+{
+    // Capabilities
+    public boolean getCapAdditionalHeader() throws JposException;
+    public boolean getCapAdditionalTrailer() throws JposException;
+    public boolean getCapChangeDue() throws JposException;
+    public boolean getCapEmptyReceiptIsVoidable() throws JposException;
+    public boolean getCapFiscalReceiptStation() throws JposException;
+    public boolean getCapFiscalReceiptType() throws JposException;
+    public boolean getCapMultiContractor() throws JposException;
+    public boolean getCapOnlyVoidLastItem() throws JposException;
+    public boolean getCapPackageAdjustment() throws JposException;
+    public boolean getCapPostPreLine() throws JposException;
+    public boolean getCapSetCurrency() throws JposException;
+    public boolean getCapTotalizerType() throws JposException;
+
+    // Properties
+    public int     getActualCurrency() throws JposException;
+    public String  getAdditionalHeader() throws JposException;
+    public void    setAdditionalHeader(String additionalHeader)
+                       throws JposException;
+    public String  getAdditionalTrailer() throws JposException;
+    public void    setAdditionalTrailer(String additionalTrailer)
+                       throws JposException;
+    public String  getChangeDue() throws JposException;
+    public void    setChangeDue(String changeDue) throws JposException;
+    public int     getContractorId() throws JposException;
+    public void    setContractorId(int contractorId) throws JposException;
+    public int     getDateType() throws JposException;
+    public void    setDateType(int dateType) throws JposException;
+    public int     getFiscalReceiptStation() throws JposException;
+    public void    setFiscalReceiptStation(int fiscalReceiptStation)
+                       throws JposException;
+    public int     getFiscalReceiptType() throws JposException;
+    public void    setFiscalReceiptType(int fiscalReceiptType)
+                       throws JposException;
+    public int     getMessageType() throws JposException;
+    public void    setMessageType(int messageType) throws JposException;
+    public String  getPostLine() throws JposException;
+    public void    setPostLine(String postLine) throws JposException;
+    public String  getPreLine() throws JposException;
+    public void    setPreLine(String preLine) throws JposException;
+    public int     getTotalizerType() throws JposException;
+    public void    setTotalizerType(int totalizerType) throws JposException;
+
+    // Methods
+    public void    setCurrency(int newCurrency) throws JposException;
+    public void    printRecCash(long amount) throws JposException;
+    public void    printRecItemFuel(String description, long price,
+                       int quantity, int vatInfo, long unitPrice,
+                       String unitName, long specialTax, String specialTaxName)
+                       throws JposException;
+    public void    printRecItemFuelVoid(String description, long price,
+                       int vatInfo, long specialTax) throws JposException;
+    public void    printRecPackageAdjustment(int adjustmentType,
+                       String description, String vatAdjustment)
+                       throws JposException;
+    public void    printRecPackageAdjustVoid(int adjustmentType,
+                       String vatAdjustment) throws JposException;
+    public void    printRecRefundVoid(String description, long amount,
+                       int vatInfo) throws JposException;
+    public void    printRecSubtotalAdjustVoid(int adjustmentType, long amount)
+                       throws JposException;
+    public void    printRecTaxID(String taxID) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl17.java b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl17.java
new file mode 100644
index 0000000..bcd77b9
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl17.java
@@ -0,0 +1,42 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// FiscalPrinterControl17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Fiscal Printer for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+// 16-Apr-2003 Release 1.7.2: Added getAmountDecimalPlaces to      BS
+//               correct a spelling error present since release
+//               1.3.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface FiscalPrinterControl17 extends FiscalPrinterControl16
+{
+	// The AmountDecimalPlaces property was incorrectly spelled
+	// AmountDecimalPlace since version 1.3.  In version 1.7.2 and later,
+	// the correct spelling is supported. The old version is left for
+	// Application and Device Service compatibility. The implementations
+	// of getAmountDecimalPlaces and getAmountDecimalPlace should be
+	// identical.
+
+	// Properties
+	public int     getAmountDecimalPlaces() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl18.java b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl18.java
new file mode 100644
index 0000000..4312838
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl18.java
@@ -0,0 +1,44 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// FiscalPrinterControl18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Fiscal Printer for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+// 16-Apr-2003 Release 1.8.2: Added getAmountDecimalPlaces to      BS
+//               correct a spelling error present since release
+//               1.3.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface FiscalPrinterControl18 extends FiscalPrinterControl17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl19.java b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl19.java
new file mode 100644
index 0000000..9948cb2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/FiscalPrinterControl19.java
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// FiscalPrinterControl19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Fiscal Printer for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface FiscalPrinterControl19 extends FiscalPrinterControl18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/Gate.java b/org.eclipse.osbp.fork.jpos/src/jpos/Gate.java
new file mode 100644
index 0000000..5703982
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/Gate.java
@@ -0,0 +1,681 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// Gate.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class Gate
+  extends BaseJposControl
+  implements GateControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected GateService112 service112;
+  protected GateService113 service113;
+  protected GateService114 service114;
+  protected Vector directIOListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public Gate()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS Gate Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    directIOListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapGateStatus()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapGateStatus();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRealTimeData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapRealTimeData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public int getGetStatus()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getGetStatus();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void openGate()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.openGate();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void waitForGateClose(int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.waitForGateClose(timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new GateCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (GateService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement GateService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (GateService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement GateService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (GateService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement GateService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class GateCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)Gate.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(Gate.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(Gate.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/Gate.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/Gate.manifest.stub
new file mode 100644
index 0000000..d82a34d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/Gate.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/Gate.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/GateBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/GateBeanInfo.java
new file mode 100644
index 0000000..760d81f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/GateBeanInfo.java
@@ -0,0 +1,91 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// GateBeanInfo.java - Bean information for the JavaPOS Gate
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class GateBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.Gate.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.Gate.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapGateStatus"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapRealTimeData"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateFirmware"),
+        makeProperty("CapUpdateStatistics"),
+
+        // Properties
+        makeProperty("GetStatus"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState")
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.Gate.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("DirectIO"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/GateConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/GateConst.java
new file mode 100644
index 0000000..5a7c388
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/GateConst.java
@@ -0,0 +1,46 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// GateConst
+//
+//   Gate constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface GateConst
+{
+  /////////////////////////////////////////////////////////////////////
+  // "GateStatus" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int GATE_GS_CLOSED               = 1;
+  public static final int GATE_GS_OPEN                 = 2;
+  public static final int GATE_GS_BLOCKED              = 3;
+  public static final int GATE_GS_MALFUNCTION          = 4;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "StatusUpdateEvent" Event: "Data" Parameter Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int GATE_SUE_CLOSED              = 11;
+  public static final int GATE_SUE_OPEN                = 12;
+  public static final int GATE_SUE_BLOCKED             = 13;
+  public static final int GATE_SUE_MALFUNCTION         = 14;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/GateControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/GateControl112.java
new file mode 100644
index 0000000..78540c3
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/GateControl112.java
@@ -0,0 +1,68 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// GateControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Gate for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface GateControl112 extends BaseControl
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapGateStatus() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public boolean getCapRealTimeData() throws JposException;
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Properties
+  public int     getGetStatus() throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName,
+                                        int[] result)
+                     throws JposException;
+  public void    openGate()
+                     throws JposException;
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    waitForGateClose(int timeout)
+                     throws JposException;
+
+  // Event listener methods
+  public void    addDirectIOListener(DirectIOListener l);
+  public void    removeDirectIOListener(DirectIOListener l);
+  public void    addStatusUpdateListener(StatusUpdateListener l);
+  public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/GateControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/GateControl113.java
new file mode 100644
index 0000000..2e7d069
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/GateControl113.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// GateControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Gate for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface GateControl113 extends GateControl112
+{
+  // Nothing new added for release 1.13
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/GateControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/GateControl114.java
new file mode 100644
index 0000000..e7356f0
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/GateControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// GateControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Gate for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface GateControl114 extends GateControl113
+{
+  // Nothing new added for release 1.14
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/HardTotals.java b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotals.java
new file mode 100644
index 0000000..03e7dac
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotals.java
@@ -0,0 +1,1367 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotals.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class HardTotals
+  extends BaseJposControl
+  implements HardTotalsControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected HardTotalsService12 service12;
+  protected HardTotalsService13 service13;
+  protected HardTotalsService14 service14;
+  protected HardTotalsService15 service15;
+  protected HardTotalsService16 service16;
+  protected HardTotalsService17 service17;
+  protected HardTotalsService18 service18;
+  protected HardTotalsService19 service19;
+  protected HardTotalsService110 service110;
+  protected HardTotalsService111 service111;
+  protected HardTotalsService112 service112;
+  protected HardTotalsService113 service113;
+  protected HardTotalsService114 service114;
+  protected Vector directIOListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public HardTotals()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS HardTotals Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service12 = null;
+    //service13 = null;
+    //service14 = null;
+    //service15 = null;
+    //service16 = null;
+    //service17 = null;
+    //service18 = null;
+    //service19 = null;
+    //service110 = null;
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    directIOListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapErrorDetection()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapErrorDetection();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSingleFile()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapSingleFile();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapTransactions()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapTransactions();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public int getFreeData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getFreeData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getNumberOfFiles()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getNumberOfFiles();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getTotalsSize()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getTotalsSize();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getTransactionInProgress()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getTransactionInProgress();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void beginTrans()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.beginTrans();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void claimFile(int hTotalsFile, int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.claimFile(hTotalsFile, timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void commitTrans()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.commitTrans();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void create(String fileName, int[] hTotalsFile, int size, boolean errorDetection)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.create(fileName, hTotalsFile, size, errorDetection);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void delete(String fileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.delete(fileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void find(String fileName, int[] hTotalsFile, int[] size)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.find(fileName, hTotalsFile, size);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void findByIndex(int index, String[] fileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.findByIndex(index, fileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void read(int hTotalsFile, byte[] data, int offset, int count)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.read(hTotalsFile, data, offset, count);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void recalculateValidationData(int hTotalsFile)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.recalculateValidationData(hTotalsFile);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void releaseFile(int hTotalsFile)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.releaseFile(hTotalsFile);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void rename(int hTotalsFile, String fileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.rename(hTotalsFile, fileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void rollback()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.rollback();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAll(int hTotalsFile, byte value)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setAll(hTotalsFile, value);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void validateData(int hTotalsFile)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.validateData(hTotalsFile);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void write(int hTotalsFile, byte[] data, int offset, int count)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.write(hTotalsFile, data, offset, count);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new HardTotalsCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service12 = null;
+      service13 = null;
+      service14 = null;
+      service15 = null;
+      service16 = null;
+      service17 = null;
+      service18 = null;
+      service19 = null;
+      service110 = null;
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion12)
+      {
+        try
+        {
+          service12 = (HardTotalsService12)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement HardTotalsService12 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion13)
+      {
+        try
+        {
+          service13 = (HardTotalsService13)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement HardTotalsService13 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion14)
+      {
+        try
+        {
+          service14 = (HardTotalsService14)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement HardTotalsService14 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion15)
+      {
+        try
+        {
+          service15 = (HardTotalsService15)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement HardTotalsService15 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion16)
+      {
+        try
+        {
+          service16 = (HardTotalsService16)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement HardTotalsService16 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion17)
+      {
+        try
+        {
+          service17 = (HardTotalsService17)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement HardTotalsService17 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion18)
+      {
+        try
+        {
+          service18 = (HardTotalsService18)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement HardTotalsService18 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion19)
+      {
+        try
+        {
+          service19 = (HardTotalsService19)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement HardTotalsService19 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion110)
+      {
+        try
+        {
+          service110 = (HardTotalsService110)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement HardTotalsService110 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (HardTotalsService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement HardTotalsService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (HardTotalsService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement HardTotalsService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (HardTotalsService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement HardTotalsService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (HardTotalsService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement HardTotalsService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class HardTotalsCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)HardTotals.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(HardTotals.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(HardTotals.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/HardTotals.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotals.manifest.stub
new file mode 100644
index 0000000..912530f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotals.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/HardTotals.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsBeanInfo.java
new file mode 100644
index 0000000..af2e77b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsBeanInfo.java
@@ -0,0 +1,95 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// HardTotalsBeanInfo.java - Bean information for the JavaPOS HardTotals
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class HardTotalsBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.HardTotals.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.HardTotals.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapErrorDetection"),
+        makeProperty("CapSingleFile"),
+        makeProperty("CapTransactions"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapUpdateFirmware"),
+
+        // Properties
+        makeProperty("FreeData"),
+        makeProperty("NumberOfFiles"),
+        makeProperty("TotalsSize"),
+        makeProperty("TransactionInProgress"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState")
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.HardTotals.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("DirectIO"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsConst.java
new file mode 100644
index 0000000..02e05d0
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsConst.java
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsConst
+//
+//   Hard Totals constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface HardTotalsConst
+{
+    //###################################################################
+    //#### Hard Totals Constants
+    //###################################################################
+
+    /////////////////////////////////////////////////////////////////////
+    // "ResultCodeExtended" Property Constants for Hard Totals
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int JPOS_ETOT_NOROOM     = 1 + JposConst.JPOSERREXT; // Create, Write
+    public static final int JPOS_ETOT_VALIDATION = 2 + JposConst.JPOSERREXT; // Read, Write
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl110.java b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl110.java
new file mode 100644
index 0000000..6408ab3
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl110.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsControl110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Hard Totals for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface HardTotalsControl110 extends HardTotalsControl19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl111.java
new file mode 100644
index 0000000..9ce54ef
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Hard Totals for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface HardTotalsControl111 extends HardTotalsControl110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl112.java
new file mode 100644
index 0000000..8551bcb
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Hard Totals for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface HardTotalsControl112 extends HardTotalsControl111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl113.java
new file mode 100644
index 0000000..e793589
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Hard Totals for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface HardTotalsControl113 extends HardTotalsControl112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl114.java
new file mode 100644
index 0000000..4f4dec4
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Hard Totals for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface HardTotalsControl114 extends HardTotalsControl113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl12.java b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl12.java
new file mode 100644
index 0000000..51a724a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl12.java
@@ -0,0 +1,69 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsControl12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to Hard Totals for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface HardTotalsControl12 extends BaseControl
+{
+    // Capabilities
+    public boolean getCapErrorDetection() throws JposException;
+    public boolean getCapSingleFile() throws JposException;
+    public boolean getCapTransactions() throws JposException;
+
+    // Properties
+    public int     getFreeData() throws JposException;
+    public int     getNumberOfFiles() throws JposException;
+    public int     getTotalsSize() throws JposException;
+    public boolean getTransactionInProgress() throws JposException;
+
+    // Methods
+    public void    beginTrans() throws JposException;
+    public void    claimFile(int hTotalsFile, int timeout)
+                       throws JposException;
+    public void    commitTrans() throws JposException;
+    public void    create(String fileName, int[] hTotalsFile, int size,
+                       boolean errorDetection) throws JposException;
+    public void    delete(String fileName) throws JposException;
+    public void    find(String fileName, int[] hTotalsFile, int[] size)
+                       throws JposException;
+    public void    findByIndex(int index, String[] fileName)
+                       throws JposException;
+    public void    read(int hTotalsFile, byte[] data, int offset,
+                       int count) throws JposException;
+    public void    recalculateValidationData(int hTotalsFile)
+                       throws JposException;
+    public void    releaseFile(int hTotalsFile) throws JposException;
+    public void    rename(int hTotalsFile, String fileName)
+                       throws JposException;
+    public void    rollback() throws JposException;
+    public void    setAll(int hTotalsFile, byte value) throws JposException;
+    public void    validateData(int hTotalsFile) throws JposException;
+    public void    write(int hTotalsFile, byte[] data, int offset, int count)
+                       throws JposException;
+
+    // Event listener methods
+    public void    addDirectIOListener(DirectIOListener l);
+    public void    removeDirectIOListener(DirectIOListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl13.java b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl13.java
new file mode 100644
index 0000000..1fc8755
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl13.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsControl13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Hard Totals for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface HardTotalsControl13 extends HardTotalsControl12
+{
+    // Capabilities
+  public int     getCapPowerReporting() throws JposException;
+
+    // Properties
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+
+    // Event listener methods
+    public void    addStatusUpdateListener(StatusUpdateListener l);
+    public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl14.java b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl14.java
new file mode 100644
index 0000000..f0c2a65
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsControl14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Hard Totals for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface HardTotalsControl14 extends HardTotalsControl13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl15.java b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl15.java
new file mode 100644
index 0000000..ef8ab18
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl15.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsControl15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Hard Totals for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 00-04-17 JavaPOS Release 1.5                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface HardTotalsControl15 extends HardTotalsControl14
+{
+  // Nothing new added for release 1.5
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl16.java b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl16.java
new file mode 100644
index 0000000..92e9216
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl16.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsControl16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Hard Totals for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-04-18 JavaPOS Release 1.6                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface HardTotalsControl16 extends HardTotalsControl15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl17.java b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl17.java
new file mode 100644
index 0000000..42536f6
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl17.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsControl17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Hard Totals for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface HardTotalsControl17 extends HardTotalsControl16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl18.java b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl18.java
new file mode 100644
index 0000000..398a24b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl18.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsControl18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Hard Totals for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface HardTotalsControl18 extends HardTotalsControl17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl19.java b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl19.java
new file mode 100644
index 0000000..b4f11af
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/HardTotalsControl19.java
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsControl19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Hard Totals for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface HardTotalsControl19 extends HardTotalsControl18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ImageScanner.java b/org.eclipse.osbp.fork.jpos/src/jpos/ImageScanner.java
new file mode 100644
index 0000000..7ea6ae8
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ImageScanner.java
@@ -0,0 +1,1500 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ImageScanner.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class ImageScanner
+  extends BaseJposControl
+  implements ImageScannerControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected ImageScannerService111 service111;
+  protected ImageScannerService112 service112;
+  protected ImageScannerService113 service113;
+  protected ImageScannerService114 service114;
+  protected Vector dataListeners;
+  protected Vector directIOListeners;
+  protected Vector errorListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public ImageScanner()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS ImageScanner Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    dataListeners = new Vector();
+    directIOListeners = new Vector();
+    errorListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapAim()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapAim();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapDecodeData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapDecodeData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapHostTriggered()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapHostTriggered();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapIlluminate()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapIlluminate();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapImageData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapImageData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapImageQuality()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapImageQuality();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapVideoData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapVideoData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public boolean getAimMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getAimMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAimMode(boolean aimMode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.setAimMode(aimMode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getAutoDisable()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getAutoDisable();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAutoDisable(boolean autoDisable)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.setAutoDisable(autoDisable);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getBitsPerPixel()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getBitsPerPixel();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDataCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getDataCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getDataEventEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getDataEventEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDataEventEnabled(boolean dataEventEnabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.setDataEventEnabled(dataEventEnabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public byte[] getFrameData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getFrameData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getFrameType()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getFrameType();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getIlluminateMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getIlluminateMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setIlluminateMode(boolean illuminateMode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.setIlluminateMode(illuminateMode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getImageHeight()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getImageHeight();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getImageLength()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getImageLength();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getImageMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getImageMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setImageMode(int imageMode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.setImageMode(imageMode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getImageQuality()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getImageQuality();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setImageQuality(int imageQuality)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.setImageQuality(imageQuality);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getImageType()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getImageType();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getImageWidth()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getImageWidth();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getVideoCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getVideoCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setVideoCount(int videoCount)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.setVideoCount(videoCount);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getVideoRate()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getVideoRate();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setVideoRate(int videoRate)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.setVideoRate(videoRate);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void clearInput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.clearInput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearInputProperties()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.clearInputProperties();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void startSession()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.startSession();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void stopSession()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.stopSession();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service111.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new ImageScannerCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (ImageScannerService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ImageScannerService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (ImageScannerService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ImageScannerService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (ImageScannerService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ImageScannerService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (ImageScannerService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ImageScannerService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.addElement(l);
+    }
+  }
+
+  public void removeDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.removeElement(l);
+    }
+  }
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.addElement(l);
+    }
+  }
+
+  public void removeErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class ImageScannerCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)ImageScanner.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+      synchronized(ImageScanner.this.dataListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < dataListeners.size(); x++)
+        {
+          ((DataListener)dataListeners.elementAt(x)).dataOccurred(e);
+        }
+      }
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(ImageScanner.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+      synchronized(ImageScanner.this.errorListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < errorListeners.size(); x++)
+        {
+          ((ErrorListener)errorListeners.elementAt(x)).errorOccurred(e);
+        }
+      }
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(ImageScanner.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ImageScanner.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/ImageScanner.manifest.stub
new file mode 100644
index 0000000..8397d48
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ImageScanner.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/ImageScanner.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ImageScannerBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/ImageScannerBeanInfo.java
new file mode 100644
index 0000000..054b831
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ImageScannerBeanInfo.java
@@ -0,0 +1,114 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// ImageScannerBeanInfo.java - Bean information for the JavaPOS ImageScanner
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class ImageScannerBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.ImageScanner.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.ImageScanner.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapAim"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapDecodeData"),
+        makeProperty("CapHostTriggered"),
+        makeProperty("CapIlluminate"),
+        makeProperty("CapImageData"),
+        makeProperty("CapImageQuality"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateFirmware"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapVideoData"),
+
+        // Properties
+        makeProperty("AimMode"),
+        makeProperty("AutoDisable"),
+        makeProperty("BitsPerPixel"),
+        makeProperty("DataCount"),
+        makeProperty("DataEventEnabled"),
+        makeProperty("FrameData"),
+        makeProperty("FrameType"),
+        makeProperty("IlluminateMode"),
+        makeProperty("ImageHeight"),
+        makeProperty("ImageLength"),
+        makeProperty("ImageMode"),
+        makeProperty("ImageQuality"),
+        makeProperty("ImageType"),
+        makeProperty("ImageWidth"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState"),
+        makeProperty("VideoCount"),
+        makeProperty("VideoRate"),
+
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.ImageScanner.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("Data"),
+        makeEvent("DirectIO"),
+        makeEvent("Error"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ImageScannerConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/ImageScannerConst.java
new file mode 100644
index 0000000..d598b33
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ImageScannerConst.java
@@ -0,0 +1,70 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ImageScannerConst
+//
+//   ImageScanner constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface ImageScannerConst
+{
+  //###################################################################
+  //#### ImageScanner Constants
+  //###################################################################
+
+  /////////////////////////////////////////////////////////////////////
+  // "FrameType" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int IMG_FRAME_STILL              = 1;
+  public static final int IMG_FRAME_VIDEO              = 2;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "ImageMode" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int IMG_ALL                      = 0xFF;
+  public static final int IMG_DECODE_ONLY              = 0x01;
+  public static final int IMG_STILL_ONLY               = 0x02;
+  public static final int IMG_STILL_DECODE             = 0x03;
+  public static final int IMG_VIDEO_DECODE             = 0x05;
+  public static final int IMG_VIDEO_STILL              = 0x06;
+
+
+/////////////////////////////////////////////////////////////////////
+// "ImageQuality" Property Constants
+/////////////////////////////////////////////////////////////////////
+
+  public static final int IMG_QUAL_LOW                 = 0x01;
+  public static final int IMG_QUAL_MED                 = 0x02;
+  public static final int IMG_QUAL_HIGH                = 0x03;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "ImageType" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int IMG_TYP_BMP                  = 1;
+  public static final int IMG_TYP_JPEG                 = 2;
+  public static final int IMG_TYP_GIF                  = 3;
+  public static final int IMG_TYP_PNG                  = 4;
+  public static final int IMG_TYP_TIFF                 = 5;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ImageScannerControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/ImageScannerControl111.java
new file mode 100644
index 0000000..7b78282
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ImageScannerControl111.java
@@ -0,0 +1,106 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ImageScannerControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Image Scanner for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ImageScannerControl111 extends BaseControl
+{
+  // Capabilities
+  public boolean getCapAim() throws JposException;
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapDecodeData() throws JposException;
+  public boolean getCapHostTriggered() throws JposException;
+  public boolean getCapIlluminate() throws JposException;
+  public boolean getCapImageData() throws JposException;
+  public boolean getCapImageQuality() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+  public boolean getCapVideoData() throws JposException;
+
+
+  // Properties
+  public boolean getAimMode() throws JposException;
+  public void    setAimMode(boolean aimMode) throws JposException;
+  public boolean getAutoDisable() throws JposException;
+  public void    setAutoDisable(boolean autoDisable) throws JposException;
+  public int     getBitsPerPixel() throws JposException;
+  public int     getDataCount() throws JposException;
+  public boolean getDataEventEnabled() throws JposException;
+  public void    setDataEventEnabled(boolean dataEventEnabled)
+                     throws JposException;
+  public byte[]  getFrameData() throws JposException;
+  public int     getFrameType() throws JposException;
+  public boolean getIlluminateMode() throws JposException;
+  public void    setIlluminateMode(boolean illuminateMode) throws JposException;
+  public int     getImageHeight() throws JposException;
+  public int     getImageLength() throws JposException;
+  public int     getImageMode() throws JposException;
+  public void    setImageMode(int imageMode) throws JposException;
+  public int     getImageQuality() throws JposException;
+  public void    setImageQuality(int imageQuality) throws JposException;
+  public int     getImageType() throws JposException;
+  public int     getImageWidth() throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+  public int     getVideoCount() throws JposException;
+  public void    setVideoCount(int videoCount) throws JposException;
+  public int     getVideoRate() throws JposException;
+  public void    setVideoRate(int videoRate) throws JposException;
+
+  // Methods
+  public void    clearInput()
+                     throws JposException;
+  public void    clearInputProperties()
+                     throws JposException;
+  public void    compareFirmwareVersion(String firmwareFileName,
+                                        int[] result)
+                     throws JposException;
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    startSession()
+                     throws JposException;
+  public void    stopSession()
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+
+  // Event listener methods
+  public void    addDataListener(DataListener l);
+  public void    removeDataListener(DataListener l);
+  public void    addDirectIOListener(DirectIOListener l);
+  public void    removeDirectIOListener(DirectIOListener l);
+  public void    addErrorListener(ErrorListener l);
+  public void    removeErrorListener(ErrorListener l);
+  public void    addStatusUpdateListener(StatusUpdateListener l);
+  public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ImageScannerControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/ImageScannerControl112.java
new file mode 100644
index 0000000..3e38118
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ImageScannerControl112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ImageScannerControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Image Scanner for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ImageScannerControl112 extends ImageScannerControl111
+{
+  // Nothing new added for release 1.12
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ImageScannerControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/ImageScannerControl113.java
new file mode 100644
index 0000000..963dfa9
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ImageScannerControl113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ImageScannerControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Image Scanner for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ImageScannerControl113 extends ImageScannerControl112
+{
+  // Nothing new added for release 1.13
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ImageScannerControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/ImageScannerControl114.java
new file mode 100644
index 0000000..06feba9
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ImageScannerControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ImageScannerControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Image Scanner for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ImageScannerControl114 extends ImageScannerControl113
+{
+  // Nothing new added for release 1.14
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ItemDispenser.java b/org.eclipse.osbp.fork.jpos/src/jpos/ItemDispenser.java
new file mode 100644
index 0000000..2fa4cba
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ItemDispenser.java
@@ -0,0 +1,781 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ItemDispenser.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class ItemDispenser
+  extends BaseJposControl
+  implements ItemDispenserControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected ItemDispenserService112 service112;
+  protected ItemDispenserService113 service113;
+  protected ItemDispenserService114 service114;
+  protected Vector directIOListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public ItemDispenser()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS ItemDispenser Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    directIOListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapEmptySensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapEmptySensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapIndividualSlotStatus()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapIndividualSlotStatus();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapJamSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapJamSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapNearEmptySensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapNearEmptySensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public int getDispenserStatus()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getDispenserStatus();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getMaxSlots()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getMaxSlots();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void adjustItemCount(int itemCount, int slotNumber)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.adjustItemCount(itemCount, slotNumber);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void dispenseItem(int[] numItem, int slotNumber)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.dispenseItem(numItem, slotNumber);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void readItemCount(int[] itemCount, int slotNumber)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.readItemCount(itemCount, slotNumber);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new ItemDispenserCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (ItemDispenserService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ItemDispenserService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (ItemDispenserService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ItemDispenserService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (ItemDispenserService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ItemDispenserService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class ItemDispenserCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)ItemDispenser.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(ItemDispenser.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(ItemDispenser.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ItemDispenser.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/ItemDispenser.manifest.stub
new file mode 100644
index 0000000..b00bcd2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ItemDispenser.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/ItemDispenser.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ItemDispenserBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/ItemDispenserBeanInfo.java
new file mode 100644
index 0000000..5c4fbd9
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ItemDispenserBeanInfo.java
@@ -0,0 +1,94 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// ItemDispenserBeanInfo.java - Bean information for the JavaPOS ItemDispenser
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class ItemDispenserBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.ItemDispenser.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.ItemDispenser.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapEmptySensor"),
+        makeProperty("CapIndividualSlotStatus"),
+        makeProperty("CapJamSensor"),
+        makeProperty("CapNearEmptySensor"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateFirmware"),
+        makeProperty("CapUpdateStatistics"),
+
+        // Properties
+        makeProperty("DispenserStatus"),
+        makeProperty("MaxSlots"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState")
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.ItemDispenser.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("DirectIO"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ItemDispenserConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/ItemDispenserConst.java
new file mode 100644
index 0000000..bc0eb97
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ItemDispenserConst.java
@@ -0,0 +1,46 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ItemDispenserConst
+//
+//   ItemDispenser constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface ItemDispenserConst
+{
+  /////////////////////////////////////////////////////////////////////
+  // "DispenserStatus" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int ITEM_DS_OK                   = 1;
+  public static final int ITEM_DS_EMPTY                = 2;
+  public static final int ITEM_DS_NEAREMPTY            = 3;
+  public static final int ITEM_DS_JAM                  = 4;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "StatusUpdateEvent" Event: "Data" Parameter Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int ITEM_SUE_OK                  = 11;
+  public static final int ITEM_SUE_EMPTY               = 12;
+  public static final int ITEM_SUE_NEAREMPTY           = 13;
+  public static final int ITEM_SUE_JAM                 = 14;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ItemDispenserControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/ItemDispenserControl112.java
new file mode 100644
index 0000000..f09dc7e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ItemDispenserControl112.java
@@ -0,0 +1,77 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ItemDispenserControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Item Dispenser for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ItemDispenserControl112 extends BaseControl
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapEmptySensor() throws JposException;
+  public boolean getCapIndividualSlotStatus() throws JposException;
+  public boolean getCapJamSensor() throws JposException;
+  public boolean getCapNearEmptySensor() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Properties
+  public int     getDispenserStatus() throws JposException;
+  public int     getMaxSlots() throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+
+  // Methods
+  public void    adjustItemCount(int itemCount,
+                                 int slotNumber)
+                     throws JposException;
+  public void    compareFirmwareVersion(String firmwareFileName,
+                                        int[] result)
+                     throws JposException;
+  public void    dispenseItem(int[] numItem,
+                              int slotNumber)
+                     throws JposException;
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    readItemCount(int[] itemCount,
+                               int slotNumber)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+
+
+  // Event listener methods
+  public void    addDirectIOListener(DirectIOListener l);
+  public void    removeDirectIOListener(DirectIOListener l);
+  public void    addStatusUpdateListener(StatusUpdateListener l);
+  public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ItemDispenserControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/ItemDispenserControl113.java
new file mode 100644
index 0000000..c4c4148
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ItemDispenserControl113.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ItemDispenserControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Item Dispenser for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ItemDispenserControl113 extends ItemDispenserControl112
+{
+  // Nothing new added for release 1.13
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ItemDispenserControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/ItemDispenserControl114.java
new file mode 100644
index 0000000..4c0708c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ItemDispenserControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ItemDispenserControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Item Dispenser for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ItemDispenserControl114 extends ItemDispenserControl113
+{
+  // Nothing new added for release 1.14
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/JposConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/JposConst.java
new file mode 100644
index 0000000..8fcd16d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/JposConst.java
@@ -0,0 +1,170 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// JposConst
+//
+//   General constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 1998-Feb-18 JavaPOS Release 1.2                                 BS
+// 1998-Apr-20 JavaPOS Release 1.3                                 BS
+//   Add CapPowerReporting, PowerState, and PowerNotify values.
+//   Add power reporting values for StatusUpdateEvent.
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//   Added the JPOS_E_DEPRECATED ErrorCode value
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface JposConst
+{
+    //###################################################################
+    //#### General JavaPOS Constants
+    //###################################################################
+
+    /////////////////////////////////////////////////////////////////////
+    // "State" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int JPOS_S_CLOSED        = 1;
+    public static final int JPOS_S_IDLE          = 2;
+    public static final int JPOS_S_BUSY          = 3;
+    public static final int JPOS_S_ERROR         = 4;
+
+    /////////////////////////////////////////////////////////////////////
+    // "ErrorCode" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int JPOSERR    = 100;
+    public static final int JPOSERREXT = 200;
+
+    public static final int JPOS_SUCCESS         =  0;
+    public static final int JPOS_E_CLOSED        =  1 + JPOSERR;
+    public static final int JPOS_E_CLAIMED       =  2 + JPOSERR;
+    public static final int JPOS_E_NOTCLAIMED    =  3 + JPOSERR;
+    public static final int JPOS_E_NOSERVICE     =  4 + JPOSERR;
+    public static final int JPOS_E_DISABLED      =  5 + JPOSERR;
+    public static final int JPOS_E_ILLEGAL       =  6 + JPOSERR;
+    public static final int JPOS_E_NOHARDWARE    =  7 + JPOSERR;
+    public static final int JPOS_E_OFFLINE       =  8 + JPOSERR;
+    public static final int JPOS_E_NOEXIST       =  9 + JPOSERR;
+    public static final int JPOS_E_EXISTS        = 10 + JPOSERR;
+    public static final int JPOS_E_FAILURE       = 11 + JPOSERR;
+    public static final int JPOS_E_TIMEOUT       = 12 + JPOSERR;
+    public static final int JPOS_E_BUSY          = 13 + JPOSERR;
+    public static final int JPOS_E_EXTENDED      = 14 + JPOSERR;
+    public static final int JPOS_E_DEPRECATED    = 15 + JPOSERR; // 1.11
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "ErrorCodeExtended" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int JPOS_ESTATS_ERROR       = 80 + JPOSERREXT;
+    public static final int JPOS_EFIRMWARE_BAD_FILE = 81 + JPOSERREXT;
+    public static final int JPOS_ESTATS_DEPENDENCY  = 82 + JPOSERREXT;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // OPOS "BinaryConversion" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int JPOS_BC_NONE         = 0;
+    public static final int JPOS_BC_NIBBLE       = 1;
+    public static final int JPOS_BC_DECIMAL      = 2;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "CheckHealth" Method: "Level" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int JPOS_CH_INTERNAL     = 1;
+    public static final int JPOS_CH_EXTERNAL     = 2;
+    public static final int JPOS_CH_INTERACTIVE  = 3;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "CapPowerReporting", "PowerState", "PowerNotify" Property
+    //   Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int JPOS_PR_NONE         = 0;
+    public static final int JPOS_PR_STANDARD     = 1;
+    public static final int JPOS_PR_ADVANCED     = 2;
+
+    public static final int JPOS_PN_DISABLED     = 0;
+    public static final int JPOS_PN_ENABLED      = 1;
+
+    public static final int JPOS_PS_UNKNOWN      = 2000;
+    public static final int JPOS_PS_ONLINE       = 2001;
+    public static final int JPOS_PS_OFF          = 2002;
+    public static final int JPOS_PS_OFFLINE      = 2003;
+    public static final int JPOS_PS_OFF_OFFLINE  = 2004;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "compareFirmwareVersion" Method: "result" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int JPOS_CFV_FIRMWARE_OLDER     = 1;
+    public static final int JPOS_CFV_FIRMWARE_SAME      = 2;
+    public static final int JPOS_CFV_FIRMWARE_NEWER     = 3;
+    public static final int JPOS_CFV_FIRMWARE_DIFFERENT = 4;
+    public static final int JPOS_CFV_FIRMWARE_UNKNOWN   = 5;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "ErrorEvent" Event: "ErrorLocus" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int JPOS_EL_OUTPUT       = 1;
+    public static final int JPOS_EL_INPUT        = 2;
+    public static final int JPOS_EL_INPUT_DATA   = 3;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "ErrorEvent" Event: "ErrorResponse" Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int JPOS_ER_RETRY        = 11;
+    public static final int JPOS_ER_CLEAR        = 12;
+    public static final int JPOS_ER_CONTINUEINPUT= 13;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "StatusUpdateEvent" Event: Common "Status" Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int JPOS_SUE_POWER_ONLINE                 = 2001;
+    public static final int JPOS_SUE_POWER_OFF                    = 2002;
+    public static final int JPOS_SUE_POWER_OFFLINE                = 2003;
+    public static final int JPOS_SUE_POWER_OFF_OFFLINE            = 2004;
+
+    public static final int JPOS_SUE_UF_PROGRESS                  = 2100;
+    public static final int JPOS_SUE_UF_COMPLETE                  = 2200; // JPOS_SUE_UF_PROGRESS + 100
+    public static final int JPOS_SUE_UF_FAILED_DEV_OK             = 2201;
+    public static final int JPOS_SUE_UF_FAILED_DEV_UNRECOVERABLE  = 2202;
+    public static final int JPOS_SUE_UF_FAILED_DEV_NEEDS_FIRMWARE = 2203;
+    public static final int JPOS_SUE_UF_FAILED_DEV_UNKNOWN        = 2204;
+    public static final int JPOS_SUE_UF_COMPLETE_DEV_NOT_RESTORED = 2205;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // General Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int JPOS_FOREVER         = -1;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/JposException.java b/org.eclipse.osbp.fork.jpos/src/jpos/JposException.java
new file mode 100644
index 0000000..502f709
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/JposException.java
@@ -0,0 +1,82 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// JposException
+//
+//   Exception class used to report all JavaPOS errors.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public class JposException extends java.lang.Exception
+{
+    public JposException(int errorCode)
+    {
+        this(errorCode, 0, "" + errorCode, null);
+    }
+
+    public JposException(int errorCode, int errorCodeExtended)
+    {
+        this(errorCode, errorCodeExtended,
+             "" + errorCode + ", " + errorCodeExtended, null);
+    }
+
+    public JposException(int errorCode, String description)
+    {
+        this(errorCode, 0, description, null);
+    }
+
+    public JposException(int errorCode, int errorCodeExtended,
+        String description)
+    {
+        this(errorCode, errorCodeExtended, description, null);
+    }
+
+    public JposException(int errorCode, String description,
+        Exception origException)
+    {
+        this(errorCode, 0, description, origException);
+    }
+
+    public JposException(int errorCode, int errorCodeExtended,
+        String description, Exception origException)
+    {
+        super(description);
+        this.errorCode = errorCode;
+        this.errorCodeExtended = errorCodeExtended;
+        this.origException = origException;
+    }
+
+    public int getErrorCode()
+    {
+        return errorCode;
+    }
+
+    public int getErrorCodeExtended()
+    {
+        return errorCodeExtended;
+    }
+
+    public Exception getOrigException()
+    {
+        return origException;
+    }
+
+    protected int errorCode;
+    protected int errorCodeExtended;
+    private Exception origException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/JposStatisticsConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/JposStatisticsConst.java
new file mode 100644
index 0000000..c7ebefd
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/JposStatisticsConst.java
@@ -0,0 +1,108 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// JposStatisticsConst
+//
+//   Statistic name constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Jul-14 JavaPOS Release 1.8.1                               BS
+//   New file to define constants for Device Statistic names.
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//   Added constants for new device classes.
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//   Added constants for statistics new to Release 1.12.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface JposStatisticsConst
+{
+  public static final String JPOS_STAT_HoursPoweredCount = "HoursPoweredCount";
+  public static final String JPOS_STAT_CommunicationErrorCount = "CommunicationErrorCount";
+  public static final String JPOS_STAT_SuccessfulMatchCount = "SuccessfulMatchCount";
+  public static final String JPOS_STAT_UnsuccessfulMatchCount = "UnsuccessfulMatchCount";
+  public static final String JPOS_STAT_AverageFAR = "AverageFAR";
+  public static final String JPOS_STAT_AverageFRR = "AverageFRR";
+  public static final String JPOS_STAT_BumpCount = "BumpCount";
+  public static final String JPOS_STAT_DrawerGoodOpenCount = "DrawerGoodOpenCount";
+  public static final String JPOS_STAT_DrawerFailedOpenCount = "DrawerFailedOpenCount";
+  public static final String JPOS_STAT_ChecksScannedCount = "ChecksScannedCount";
+  public static final String JPOS_STAT_WriteCount = "WriteCount";
+  public static final String JPOS_STAT_FailedWriteCount = "FailedWriteCount";
+  public static final String JPOS_STAT_EraseCount = "EraseCount";
+  public static final String JPOS_STAT_MediumRemovedCount = "MediumRemovedCount";
+  public static final String JPOS_STAT_MediumSize = "MediumSize";
+  public static final String JPOS_STAT_MediumFreeSpace = "MediumFreeSpace";
+  public static final String JPOS_STAT_BarcodePrintedCount = "BarcodePrintedCount";
+  public static final String JPOS_STAT_FormInsertionCount = "FormInsertionCount";
+  public static final String JPOS_STAT_HomeErrorCount = "HomeErrorCount";
+  public static final String JPOS_STAT_JournalCharacterPrintedCount = "JournalCharacterPrintedCount";
+  public static final String JPOS_STAT_JournalLinePrintedCount = "JournalLinePrintedCount";
+  public static final String JPOS_STAT_MaximumTempReachedCount = "MaximumTempReachedCount";
+  public static final String JPOS_STAT_NVRAMWriteCount = "NVRAMWriteCount";
+  public static final String JPOS_STAT_PaperCutCount = "PaperCutCount";
+  public static final String JPOS_STAT_FailedPaperCutCount = "FailedPaperCutCount";
+  public static final String JPOS_STAT_PrinterFaultCount = "PrinterFaultCount";
+  public static final String JPOS_STAT_PrintSideChangeCount = "PrintSideChangeCount";
+  public static final String JPOS_STAT_FailedPrintSideChangeCount = "FailedPrintSideChangeCount";
+  public static final String JPOS_STAT_ReceiptCharacterPrintedCount = "ReceiptCharacterPrintedCount";
+  public static final String JPOS_STAT_ReceiptCoverOpenCount = "ReceiptCoverOpenCount";
+  public static final String JPOS_STAT_ReceiptLineFeedCount = "ReceiptLineFeedCount";
+  public static final String JPOS_STAT_ReceiptLinePrintedCount = "ReceiptLinePrintedCount";
+  public static final String JPOS_STAT_SlipCharacterPrintedCount = "SlipCharacterPrintedCount";
+  public static final String JPOS_STAT_SlipCoverOpenCount = "SlipCoverOpenCount";
+  public static final String JPOS_STAT_SlipLineFeedCount = "SlipLineFeedCount";
+  public static final String JPOS_STAT_SlipLinePrintedCount = "SlipLinePrintedCount";
+  public static final String JPOS_STAT_StampFiredCount = "StampFiredCount";
+  public static final String JPOS_STAT_GoodReadCount = "GoodReadCount";
+  public static final String JPOS_STAT_NoReadCount = "NoReadCount";
+  public static final String JPOS_STAT_SessionCount = "SessionCount";
+  public static final String JPOS_STAT_LockPositionChangeCount = "LockPositionChangeCount";
+  public static final String JPOS_STAT_OnlineTransitionCount = "OnlineTransitionCount";
+  public static final String JPOS_STAT_FailedDataParseCount = "FailedDataParseCount";
+  public static final String JPOS_STAT_UnreadableCardCount = "UnreadableCardCount";
+  public static final String JPOS_STAT_GoodWriteCount = "GoodWriteCount";
+  public static final String JPOS_STAT_MissingStartSentinelTrack1Count = "MissingStartSentinelTrack1Count";
+  public static final String JPOS_STAT_ParityLRCErrorTrack1Count = "ParityLRCErrorTrack1Count";
+  public static final String JPOS_STAT_MissingStartSentinelTrack2Count = "MissingStartSentinelTrack2Count";
+  public static final String JPOS_STAT_ParityLRCErrorTrack2Count = "ParityLRCErrorTrack2Count";
+  public static final String JPOS_STAT_MissingStartSentinelTrack3Count = "MissingStartSentinelTrack3Count";
+  public static final String JPOS_STAT_ParityLRCErrorTrack3Count = "ParityLRCErrorTrack3Count";
+  public static final String JPOS_STAT_MissingStartSentinelTrack4Count = "MissingStartSentinelTrack4Count";
+  public static final String JPOS_STAT_ParityLRCErrorTrack4Count = "ParityLRCErrorTrack4Count";
+  public static final String JPOS_STAT_GoodCardAuthenticationDataCount = "GoodCardAuthenticationDataCount";
+  public static final String JPOS_STAT_FailedCardAuthenticationDataCount = "FailedCardAuthenticationDataCount";
+  public static final String JPOS_STAT_ChallengeRequestCount = "ChallengeRequestCount";
+  public static final String JPOS_STAT_GoodDeviceAuthenticationCount = "GoodDeviceAuthenticationCount";
+  public static final String JPOS_STAT_FailedDeviceAuthenticationCount = "FailedDeviceAuthenticationCount";
+  public static final String JPOS_STAT_FailedReadCount = "FailedReadCount";
+  public static final String JPOS_STAT_MotionEventCount = "MotionEventCount";
+  public static final String JPOS_STAT_ValidPINEntryCount = "ValidPINEntryCount";
+  public static final String JPOS_STAT_InvalidPINEntryCount = "InvalidPINEntryCount";
+  public static final String JPOS_STAT_KeyPressedCount = "KeyPressedCount";
+  public static final String JPOS_STAT_TagReadCount = "TagReadCount";
+  public static final String JPOS_STAT_GoodTagWriteCount = "GoodTagWriteCount";
+  public static final String JPOS_STAT_FailedTagWriteCount = "FailedTagWriteCount";
+  public static final String JPOS_STAT_GoodTagLockCount = "GoodTagLockCount";
+  public static final String JPOS_STAT_FailedTagLockCount = "FailedTagLockCount";
+  public static final String JPOS_STAT_GoodTagDisableCount = "GoodTagDisableCount";
+  public static final String JPOS_STAT_FailedTagDisableCount = "FailedTagDisableCount";
+  public static final String JPOS_STAT_GoodWeightReadCount = "GoodWeightReadCount";
+  public static final String JPOS_STAT_GoodScanCount = "GoodScanCount";
+  public static final String JPOS_STAT_GoodSignatureReadCount = "GoodSignatureReadCount";
+  public static final String JPOS_STAT_FailedSignatureReadCount = "FailedSignatureReadCount";
+  public static final String JPOS_STAT_ToneSoundedCount = "ToneSoundedCount";
+}
+
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/Keylock.java b/org.eclipse.osbp.fork.jpos/src/jpos/Keylock.java
new file mode 100644
index 0000000..56918da
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/Keylock.java
@@ -0,0 +1,956 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// Keylock.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class Keylock
+  extends BaseJposControl
+  implements KeylockControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected KeylockService12 service12;
+  protected KeylockService13 service13;
+  protected KeylockService14 service14;
+  protected KeylockService15 service15;
+  protected KeylockService16 service16;
+  protected KeylockService17 service17;
+  protected KeylockService18 service18;
+  protected KeylockService19 service19;
+  protected KeylockService110 service110;
+  protected KeylockService111 service111;
+  protected KeylockService112 service112;
+  protected KeylockService113 service113;
+  protected KeylockService114 service114;
+  protected Vector directIOListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public Keylock()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS Keylock Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service12 = null;
+    //service13 = null;
+    //service14 = null;
+    //service15 = null;
+    //service16 = null;
+    //service17 = null;
+    //service18 = null;
+    //service19 = null;
+    //service110 = null;
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    directIOListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapKeylockType()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.11.0
+    if(serviceVersion < deviceVersion111)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.11.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getCapKeylockType();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public int getKeyPosition()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getKeyPosition();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPositionCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getPositionCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public byte[] getElectronicKeyValue()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.11.0
+    if(serviceVersion < deviceVersion111)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.11.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service111.getElectronicKeyValue();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void waitForKeylockChange(int keyPosition, int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.waitForKeylockChange(keyPosition, timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new KeylockCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service12 = null;
+      service13 = null;
+      service14 = null;
+      service15 = null;
+      service16 = null;
+      service17 = null;
+      service18 = null;
+      service19 = null;
+      service110 = null;
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion12)
+      {
+        try
+        {
+          service12 = (KeylockService12)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement KeylockService12 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion13)
+      {
+        try
+        {
+          service13 = (KeylockService13)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement KeylockService13 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion14)
+      {
+        try
+        {
+          service14 = (KeylockService14)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement KeylockService14 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion15)
+      {
+        try
+        {
+          service15 = (KeylockService15)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement KeylockService15 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion16)
+      {
+        try
+        {
+          service16 = (KeylockService16)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement KeylockService16 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion17)
+      {
+        try
+        {
+          service17 = (KeylockService17)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement KeylockService17 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion18)
+      {
+        try
+        {
+          service18 = (KeylockService18)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement KeylockService18 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion19)
+      {
+        try
+        {
+          service19 = (KeylockService19)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement KeylockService19 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion110)
+      {
+        try
+        {
+          service110 = (KeylockService110)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement KeylockService110 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (KeylockService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement KeylockService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (KeylockService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement KeylockService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (KeylockService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement KeylockService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (KeylockService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement KeylockService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class KeylockCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)Keylock.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(Keylock.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(Keylock.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/Keylock.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/Keylock.manifest.stub
new file mode 100644
index 0000000..37f0f48
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/Keylock.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/Keylock.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/KeylockBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockBeanInfo.java
new file mode 100644
index 0000000..9fe1099
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockBeanInfo.java
@@ -0,0 +1,92 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// KeylockBeanInfo.java - Bean information for the JavaPOS Keylock
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class KeylockBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.Keylock.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.Keylock.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapUpdateFirmware"),
+        makeProperty("CapKeylockType"),
+
+        // Properties
+        makeProperty("KeyPosition"),
+        makeProperty("PositionCount"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState"),
+        makeProperty("ElectronicKeyValue")
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.Keylock.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("DirectIO"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/KeylockConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockConst.java
new file mode 100644
index 0000000..a56fbbf
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockConst.java
@@ -0,0 +1,56 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockConst
+//
+//   Keylock constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 1998-Feb-18 JavaPOS Release 1.2                                 BS
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//   Added new StatusUpdateEvent constant:
+//       LOCK_KP_ELECTRONIC
+//   Added new CapKeylockType constants:
+//       LOCK_KT_STANDARD
+//       LOCK_KT_ELECTRONIC
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface KeylockConst
+{
+    //###################################################################
+    //#### Keylock Constants
+    //###################################################################
+
+    /////////////////////////////////////////////////////////////////////
+    // "KeyPosition" Property Constants
+    // "WaitForKeylockChange" Method: "KeyPosition" Parameter
+    // "StatusUpdateEvent" Event: "status" Parameter
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int LOCK_KP_ANY          = 0; // WaitForKeylockChange Only
+    public static final int LOCK_KP_ELECTRONIC   = 0; // StatusUpdateEvent Only (1.11)
+    public static final int LOCK_KP_LOCK         = 1;
+    public static final int LOCK_KP_NORM         = 2;
+    public static final int LOCK_KP_SUPR         = 3;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "CapKeylockType" Property Constants                  Added in 1.11
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int LOCK_KT_STANDARD     = 1; // 1.11
+    public static final int LOCK_KT_ELECTRONIC   = 2; // 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl110.java b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl110.java
new file mode 100644
index 0000000..d658f67
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl110.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockControl110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Keylock for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface KeylockControl110 extends KeylockControl19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl111.java
new file mode 100644
index 0000000..1468872
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl111.java
@@ -0,0 +1,35 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Keylock for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface KeylockControl111 extends KeylockControl110
+{
+  // Capabilities
+  public int     getCapKeylockType() throws JposException;
+
+  // Properties
+  public byte[]  getElectronicKeyValue() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl112.java
new file mode 100644
index 0000000..a9df1a2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Keylock for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface KeylockControl112 extends KeylockControl111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl113.java
new file mode 100644
index 0000000..98d2173
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Keylock for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface KeylockControl113 extends KeylockControl112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl114.java
new file mode 100644
index 0000000..f84d8dd
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Keylock for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface KeylockControl114 extends KeylockControl113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl12.java b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl12.java
new file mode 100644
index 0000000..f24025e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl12.java
@@ -0,0 +1,43 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockControl12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to Keylock for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface KeylockControl12 extends BaseControl
+{
+    // Properties
+    public int     getKeyPosition() throws JposException;
+    public int     getPositionCount() throws JposException;
+
+    // Methods
+    public void    waitForKeylockChange(int keyPosition, int timeout)
+                       throws JposException;
+
+    // Event listener methods
+    public void    addDirectIOListener(DirectIOListener l);
+    public void    removeDirectIOListener(DirectIOListener l);
+    public void    addStatusUpdateListener(StatusUpdateListener l);
+    public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl13.java b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl13.java
new file mode 100644
index 0000000..4426ebf
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl13.java
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockControl13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Keylock for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface KeylockControl13 extends KeylockControl12
+{
+    // Capabilities
+  public int     getCapPowerReporting() throws JposException;
+
+    // Properties
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl14.java b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl14.java
new file mode 100644
index 0000000..9226d13
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockControl14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Keylock for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface KeylockControl14 extends KeylockControl13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl15.java b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl15.java
new file mode 100644
index 0000000..85433a6
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl15.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockControl15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Keylock for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 00-04-17 JavaPOS Release 1.5                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface KeylockControl15 extends KeylockControl14
+{
+  // Nothing new added for release 1.5
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl16.java b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl16.java
new file mode 100644
index 0000000..c241a40
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl16.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockControl16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Keylock for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-04-18 JavaPOS Release 1.6                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface KeylockControl16 extends KeylockControl15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl17.java b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl17.java
new file mode 100644
index 0000000..2193917
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl17.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockControl17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Keylock for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface KeylockControl17 extends KeylockControl16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl18.java b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl18.java
new file mode 100644
index 0000000..4144ee8
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl18.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockControl18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Keylock for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface KeylockControl18 extends KeylockControl17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl19.java b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl19.java
new file mode 100644
index 0000000..420668f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/KeylockControl19.java
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockControl19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Keylock for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface KeylockControl19 extends KeylockControl18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/Lights.java b/org.eclipse.osbp.fork.jpos/src/jpos/Lights.java
new file mode 100644
index 0000000..d4c42bc
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/Lights.java
@@ -0,0 +1,706 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// Lights.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class Lights
+  extends BaseJposControl
+  implements LightsControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected LightsService112 service112;
+  protected LightsService113 service113;
+  protected LightsService114 service114;
+  protected Vector directIOListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public Lights()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS Lights Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    directIOListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public int getCapAlarm()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapAlarm();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapBlink()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapBlink();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapColor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapColor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public int getMaxLights()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getMaxLights();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void switchOff(int lightNumber)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.switchOff(lightNumber);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void switchOn(int lightNumber, int blinkOnCycle, int blinkOffCycle, int color, int alarm)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.switchOn(lightNumber, blinkOnCycle, blinkOffCycle, color, alarm);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new LightsCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (LightsService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement LightsService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (LightsService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement LightsService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (LightsService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement LightsService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class LightsCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)Lights.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(Lights.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(Lights.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/Lights.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/Lights.manifest.stub
new file mode 100644
index 0000000..92744ee
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/Lights.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/Lights.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/LightsBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/LightsBeanInfo.java
new file mode 100644
index 0000000..20f7695
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/LightsBeanInfo.java
@@ -0,0 +1,92 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// LightsBeanInfo.java - Bean information for the JavaPOS Lights
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class LightsBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.Lights.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.Lights.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapAlarm"),
+        makeProperty("CapBlink"),
+        makeProperty("CapColor"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateFirmware"),
+        makeProperty("CapUpdateStatistics"),
+
+        // Properties
+        makeProperty("MaxLights"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState")
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.Lights.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("DirectIO"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/LightsConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/LightsConst.java
new file mode 100644
index 0000000..47a8b1e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/LightsConst.java
@@ -0,0 +1,50 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LightsConst
+//
+//   Lights constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface LightsConst
+{
+  /////////////////////////////////////////////////////////////////////
+  // "CapAlarm" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int LGT_ALARM_NOALARM                    = 0x00000001;
+  public static final int LGT_ALARM_SLOW                       = 0x00000010;
+  public static final int LGT_ALARM_MEDIUM                     = 0x00000020;
+  public static final int LGT_ALARM_FAST                       = 0x00000040;
+  public static final int LGT_ALARM_CUSTOM1                    = 0x00010000;
+  public static final int LGT_ALARM_CUSTOM2                    = 0x00020000;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "CapColor" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int LGT_COLOR_PRIMARY                    = 0x00000001;
+  public static final int LGT_COLOR_CUSTOM1                    = 0x00010000;
+  public static final int LGT_COLOR_CUSTOM2                    = 0x00020000;
+  public static final int LGT_COLOR_CUSTOM3                    = 0x00040000;
+  public static final int LGT_COLOR_CUSTOM4                    = 0x00080000;
+  public static final int LGT_COLOR_CUSTOM5                    = 0x00100000;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/LightsControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/LightsControl112.java
new file mode 100644
index 0000000..349c91f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/LightsControl112.java
@@ -0,0 +1,73 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LightsControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Lights for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface LightsControl112 extends BaseControl
+{
+  // Capabilities
+  public int     getCapAlarm() throws JposException;
+  public boolean getCapBlink() throws JposException;
+  public int     getCapColor() throws JposException;
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Properties
+  public int     getMaxLights() throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName,
+                                        int[] result)
+                     throws JposException;
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    switchOff(int lightNumber)
+                     throws JposException;
+  public void    switchOn(int lightNumber,
+                          int blinkOnCycle,
+                          int blinkOffCycle,
+                          int color,
+                          int alarm)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+
+  // Event listener methods
+  public void    addDirectIOListener(DirectIOListener l);
+  public void    removeDirectIOListener(DirectIOListener l);
+  public void    addStatusUpdateListener(StatusUpdateListener l);
+  public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/LightsControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/LightsControl113.java
new file mode 100644
index 0000000..4e9d003
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/LightsControl113.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LightsControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Lights for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface LightsControl113 extends LightsControl112
+{
+  // Nothing new added for release 1.13
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/LightsControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/LightsControl114.java
new file mode 100644
index 0000000..f360976
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/LightsControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LightsControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Lights for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface LightsControl114 extends LightsControl113
+{
+  // Nothing new added for release 1.14
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplay.java b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplay.java
new file mode 100644
index 0000000..652db22
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplay.java
@@ -0,0 +1,2774 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplay.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class LineDisplay
+  extends BaseJposControl
+  implements LineDisplayControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected LineDisplayService12 service12;
+  protected LineDisplayService13 service13;
+  protected LineDisplayService14 service14;
+  protected LineDisplayService15 service15;
+  protected LineDisplayService16 service16;
+  protected LineDisplayService17 service17;
+  protected LineDisplayService18 service18;
+  protected LineDisplayService19 service19;
+  protected LineDisplayService110 service110;
+  protected LineDisplayService111 service111;
+  protected LineDisplayService112 service112;
+  protected LineDisplayService113 service113;
+  protected LineDisplayService114 service114;
+  protected Vector directIOListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public LineDisplay()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS LineDisplay Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service12 = null;
+    //service13 = null;
+    //service14 = null;
+    //service15 = null;
+    //service16 = null;
+    //service17 = null;
+    //service18 = null;
+    //service19 = null;
+    //service110 = null;
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    directIOListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public int getCapBlink()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapBlink();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapBrightness()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapBrightness();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapCharacterSet()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapCharacterSet();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapDescriptors()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapDescriptors();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapHMarquee()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapHMarquee();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapICharWait()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapICharWait();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapVMarquee()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapVMarquee();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapBlinkRate()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getCapBlinkRate();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapCursorType()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getCapCursorType();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCustomGlyph()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getCapCustomGlyph();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapReadBack()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getCapReadBack();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapReverse()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getCapReverse();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapBitmap()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.7.0
+    if(serviceVersion < deviceVersion17)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.7.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getCapBitmap();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapMapCharacterSet()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.7.0
+    if(serviceVersion < deviceVersion17)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.7.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getCapMapCharacterSet();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapScreenMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.7.0
+    if(serviceVersion < deviceVersion17)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.7.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getCapScreenMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public int getCharacterSet()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCharacterSet();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setCharacterSet(int characterSet)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setCharacterSet(characterSet);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getCharacterSetList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCharacterSetList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getColumns()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getColumns();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCurrentWindow()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCurrentWindow();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setCurrentWindow(int currentWindow)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setCurrentWindow(currentWindow);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCursorColumn()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCursorColumn();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setCursorColumn(int cursorColumn)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setCursorColumn(cursorColumn);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCursorRow()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCursorRow();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setCursorRow(int cursorRow)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setCursorRow(cursorRow);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCursorUpdate()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCursorUpdate();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setCursorUpdate(boolean cursorUpdate)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setCursorUpdate(cursorUpdate);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDeviceBrightness()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getDeviceBrightness();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDeviceBrightness(int deviceBrightness)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setDeviceBrightness(deviceBrightness);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDeviceColumns()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getDeviceColumns();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDeviceDescriptors()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getDeviceDescriptors();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDeviceRows()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getDeviceRows();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDeviceWindows()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getDeviceWindows();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getInterCharacterWait()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getInterCharacterWait();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setInterCharacterWait(int interCharacterWait)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setInterCharacterWait(interCharacterWait);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getMarqueeFormat()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getMarqueeFormat();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setMarqueeFormat(int marqueeFormat)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setMarqueeFormat(marqueeFormat);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getMarqueeRepeatWait()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getMarqueeRepeatWait();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setMarqueeRepeatWait(int marqueeRepeatWait)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setMarqueeRepeatWait(marqueeRepeatWait);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getMarqueeType()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getMarqueeType();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setMarqueeType(int marqueeType)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setMarqueeType(marqueeType);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getMarqueeUnitWait()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getMarqueeUnitWait();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setMarqueeUnitWait(int marqueeUnitWait)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setMarqueeUnitWait(marqueeUnitWait);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getRows()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getRows();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getBlinkRate()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getBlinkRate();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setBlinkRate(int blinkRate)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service16.setBlinkRate(blinkRate);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCursorType()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getCursorType();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setCursorType(int cursorType)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service16.setCursorType(cursorType);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getCustomGlyphList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getCustomGlyphList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getGlyphHeight()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getGlyphHeight();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getGlyphWidth()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service16.getGlyphWidth();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getMapCharacterSet()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.7.0
+    if(serviceVersion < deviceVersion17)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.7.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getMapCharacterSet();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setMapCharacterSet(boolean mapCharacterSet)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.7.0
+    if(serviceVersion < deviceVersion17)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.7.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.setMapCharacterSet(mapCharacterSet);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getMaximumX()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.7.0
+    if(serviceVersion < deviceVersion17)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.7.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getMaximumX();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getMaximumY()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.7.0
+    if(serviceVersion < deviceVersion17)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.7.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getMaximumY();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getScreenMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.7.0
+    if(serviceVersion < deviceVersion17)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.7.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getScreenMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setScreenMode(int screenMode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.7.0
+    if(serviceVersion < deviceVersion17)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.7.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.setScreenMode(screenMode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getScreenModeList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.7.0
+    if(serviceVersion < deviceVersion17)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.7.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getScreenModeList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void clearDescriptors()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.clearDescriptors();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearText()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.clearText();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void createWindow(int viewportRow, int viewportColumn, int viewportHeight, int viewportWidth, int windowHeight, int windowWidth)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.createWindow(viewportRow, viewportColumn, viewportHeight, viewportWidth, windowHeight, windowWidth);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void destroyWindow()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.destroyWindow();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void displayText(String data, int attribute)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.displayText(data, attribute);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void displayTextAt(int row, int column, String data, int attribute)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.displayTextAt(row, column, data, attribute);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void refreshWindow(int window)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.refreshWindow(window);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void scrollText(int direction, int units)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.scrollText(direction, units);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDescriptor(int descriptor, int attribute)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setDescriptor(descriptor, attribute);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void defineGlyph(int glyphCode, byte[] glyph)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service16.defineGlyph(glyphCode, glyph);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void readCharacterAtCursor(int[] aChar)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.6.0
+    if(serviceVersion < deviceVersion16)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.6.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service16.readCharacterAtCursor(aChar);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void displayBitmap(String fileName, int width, int alignmentX, int alignmentY)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.7.0
+    if(serviceVersion < deviceVersion17)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.7.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.displayBitmap(fileName, width, alignmentX, alignmentY);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setBitmap(int bitmapNumber, String fileName, int width, int alignmentX, int alignmentY)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.7.0
+    if(serviceVersion < deviceVersion17)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.7.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.setBitmap(bitmapNumber, fileName, width, alignmentX, alignmentY);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new LineDisplayCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service12 = null;
+      service13 = null;
+      service14 = null;
+      service15 = null;
+      service16 = null;
+      service17 = null;
+      service18 = null;
+      service19 = null;
+      service110 = null;
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion12)
+      {
+        try
+        {
+          service12 = (LineDisplayService12)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement LineDisplayService12 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion13)
+      {
+        try
+        {
+          service13 = (LineDisplayService13)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement LineDisplayService13 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion14)
+      {
+        try
+        {
+          service14 = (LineDisplayService14)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement LineDisplayService14 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion15)
+      {
+        try
+        {
+          service15 = (LineDisplayService15)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement LineDisplayService15 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion16)
+      {
+        try
+        {
+          service16 = (LineDisplayService16)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement LineDisplayService16 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion17)
+      {
+        try
+        {
+          service17 = (LineDisplayService17)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement LineDisplayService17 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion18)
+      {
+        try
+        {
+          service18 = (LineDisplayService18)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement LineDisplayService18 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion19)
+      {
+        try
+        {
+          service19 = (LineDisplayService19)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement LineDisplayService19 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion110)
+      {
+        try
+        {
+          service110 = (LineDisplayService110)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement LineDisplayService110 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (LineDisplayService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement LineDisplayService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (LineDisplayService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement LineDisplayService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (LineDisplayService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement LineDisplayService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (LineDisplayService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement LineDisplayService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class LineDisplayCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)LineDisplay.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(LineDisplay.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(LineDisplay.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplay.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplay.manifest.stub
new file mode 100644
index 0000000..75c250b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplay.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/LineDisplay.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayBeanInfo.java
new file mode 100644
index 0000000..1e83c57
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayBeanInfo.java
@@ -0,0 +1,131 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// LineDisplayBeanInfo.java - Bean information for the JavaPOS LineDisplay
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class LineDisplayBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.LineDisplay.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.LineDisplay.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapBlink"),
+        makeProperty("CapBrightness"),
+        makeProperty("CapCharacterSet"),
+        makeProperty("CapDescriptors"),
+        makeProperty("CapHMarquee"),
+        makeProperty("CapICharWait"),
+        makeProperty("CapVMarquee"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapBlinkRate"),
+        makeProperty("CapCursorType"),
+        makeProperty("CapCustomGlyph"),
+        makeProperty("CapReadBack"),
+        makeProperty("CapReverse"),
+        makeProperty("CapBitmap"),
+        makeProperty("CapMapCharacterSet"),
+        makeProperty("CapScreenMode"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapUpdateFirmware"),
+
+        // Properties
+        makeProperty("CharacterSet"),
+        makeProperty("CharacterSetList"),
+        makeProperty("Columns"),
+        makeProperty("CurrentWindow"),
+        makeProperty("CursorColumn"),
+        makeProperty("CursorRow"),
+        makeProperty("CursorUpdate"),
+        makeProperty("DeviceBrightness"),
+        makeProperty("DeviceColumns"),
+        makeProperty("DeviceDescriptors"),
+        makeProperty("DeviceRows"),
+        makeProperty("DeviceWindows"),
+        makeProperty("InterCharacterWait"),
+        makeProperty("MarqueeFormat"),
+        makeProperty("MarqueeRepeatWait"),
+        makeProperty("MarqueeType"),
+        makeProperty("MarqueeUnitWait"),
+        makeProperty("Rows"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState"),
+        makeProperty("BlinkRate"),
+        makeProperty("CursorType"),
+        makeProperty("CustomGlyphList"),
+        makeProperty("GlyphHeight"),
+        makeProperty("GlyphWidth"),
+        makeProperty("MapCharacterSet"),
+        makeProperty("MaximumX"),
+        makeProperty("MaximumY"),
+        makeProperty("ScreenMode"),
+        makeProperty("ScreenModeList")
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.LineDisplay.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("DirectIO"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayConst.java
new file mode 100644
index 0000000..a913b0b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayConst.java
@@ -0,0 +1,205 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayConst
+//
+//   Line Display constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+// 16-Apr-2003 Release 1.7.2: Added the missing constant          BS
+//               DISP_CCT_NONE.
+// 03-Jun-2003 JavaPOS Release 1.8                                BS
+//    Added constants DISP_CCT_BLINK and DISP_CT_BLINK
+// 15-Sep-2004 JavaPOS Release 1.8.2                              BS
+//    Added missing constants EDISP_TOOBIG and EDISP_BADFORMAT.
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface LineDisplayConst
+{
+    //###################################################################
+    //#### Line Display Constants
+    //###################################################################
+
+    /////////////////////////////////////////////////////////////////////
+    // "CapBlink" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int DISP_CB_NOBLINK      = 0;
+    public static final int DISP_CB_BLINKALL     = 1;
+    public static final int DISP_CB_BLINKEACH    = 2;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "CapCharacterSet" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int DISP_CCS_NUMERIC     =   0;
+    public static final int DISP_CCS_ALPHA       =   1;
+    public static final int DISP_CCS_ASCII       = 998;
+    public static final int DISP_CCS_KANA        =  10;
+    public static final int DISP_CCS_KANJI       =  11;
+    public static final int DISP_CCS_UNICODE     = 997;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "CapCursorType" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int DISP_CCT_NONE        =   0x00000000;
+    public static final int DISP_CCT_FIXED       =   0x00000001;
+    public static final int DISP_CCT_BLOCK       =   0x00000002;
+    public static final int DISP_CCT_HALFBLOCK   =   0x00000004;
+    public static final int DISP_CCT_UNDERLINE   =   0x00000008;
+    public static final int DISP_CCT_REVERSE     =   0x00000010;
+    public static final int DISP_CCT_OTHER       =   0x00000020;
+
+    // Added in Release 1.8
+    public static final int DISP_CCT_BLINK       =   0x00000040;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "CapReadBack" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int DISP_CRB_NONE        =   0x00000000;
+    public static final int DISP_CRB_SINGLE      =   0x00000001;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "CapReverse" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int DISP_CR_NONE          =   0x00000000;
+    public static final int DISP_CR_REVERSEALL    =   0x00000001;
+    public static final int DISP_CR_REVERSEEACH   =   0x00000002;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "CharacterSet" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int DISP_CS_UNICODE      = 997;
+    public static final int DISP_CS_ASCII        = 998;
+    public static final int DISP_CS_ANSI         = 999;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "CursorType" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int DISP_CT_NONE        =   0;
+    public static final int DISP_CT_FIXED       =   1;
+    public static final int DISP_CT_BLOCK       =   2;
+    public static final int DISP_CT_HALFBLOCK   =   3;
+    public static final int DISP_CT_UNDERLINE   =   4;
+    public static final int DISP_CT_REVERSE     =   5;
+    public static final int DISP_CT_OTHER       =   6;
+
+    // Added in Release 1.8
+    public static final int DISP_CT_BLINK       =   0x10000000;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "MarqueeType" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int DISP_MT_NONE         = 0;
+    public static final int DISP_MT_UP           = 1;
+    public static final int DISP_MT_DOWN         = 2;
+    public static final int DISP_MT_LEFT         = 3;
+    public static final int DISP_MT_RIGHT        = 4;
+    public static final int DISP_MT_INIT         = 5;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "MarqueeFormat" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int DISP_MF_WALK         = 0;
+    public static final int DISP_MF_PLACE        = 1;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "DefineGlyph" Method: "GlyphType" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int DISP_GT_SINGLE       = 1;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "DisplayText" Method: "Attribute" Property Constants
+    // "DisplayTextAt" Method: "Attribute" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int DISP_DT_NORMAL        = 0;
+    public static final int DISP_DT_BLINK         = 1;
+    public static final int DISP_DT_REVERSE       = 2;
+    public static final int DISP_DT_BLINK_REVERSE = 3;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "ScrollText" Method: "Direction" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int DISP_ST_UP           = 1;
+    public static final int DISP_ST_DOWN         = 2;
+    public static final int DISP_ST_LEFT         = 3;
+    public static final int DISP_ST_RIGHT        = 4;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "SetDescriptor" Method: "Attribute" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int DISP_SD_OFF          = 0;
+    public static final int DISP_SD_ON           = 1;
+    public static final int DISP_SD_BLINK        = 2;
+
+
+    /////////////////////////////////////////////////////////////////////
+    /////////////////////////////////////////////////////////////////////
+    // The following were added in Release 1.7
+    /////////////////////////////////////////////////////////////////////
+    /////////////////////////////////////////////////////////////////////
+
+    /////////////////////////////////////////////////////////////////////
+    // "displayBitmap" and "setBitmap" Method Constants:
+    /////////////////////////////////////////////////////////////////////
+
+    //   "Width" Parameter
+
+    public static final int DISP_BM_ASIS          = -11;
+
+    //   "AlignmentX" Parameter
+
+    public static final int DISP_BM_LEFT          = -1;
+    public static final int DISP_BM_CENTER        = -2;
+    public static final int DISP_BM_RIGHT         = -3;
+
+    //   "AlignmentY" Parameter
+
+    public static final int DISP_BM_TOP           = -1;
+    //public static final int DISP_BM_CENTER      = -2;
+    public static final int DISP_BM_BOTTOM        = -3;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "ErrorCodeExtended" Property Constants for Line Display
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int JPOS_EDISP_TOOBIG    = 1 + JposConst.JPOSERREXT; // DisplayBitmap
+    public static final int JPOS_EDISP_BADFORMAT = 2 + JposConst.JPOSERREXT; // DisplayBitmap
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl110.java b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl110.java
new file mode 100644
index 0000000..86ef406
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl110.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayControl110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Line Display for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface LineDisplayControl110 extends LineDisplayControl19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl111.java
new file mode 100644
index 0000000..189aad3
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Line Display for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface LineDisplayControl111 extends LineDisplayControl110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl112.java
new file mode 100644
index 0000000..f0b9acb
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Line Display for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface LineDisplayControl112 extends LineDisplayControl111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl113.java
new file mode 100644
index 0000000..0f88a36
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Line Display for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface LineDisplayControl113 extends LineDisplayControl112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl114.java
new file mode 100644
index 0000000..f13d2da
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Line Display for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface LineDisplayControl114 extends LineDisplayControl113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl12.java b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl12.java
new file mode 100644
index 0000000..7038a92
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl12.java
@@ -0,0 +1,93 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayControl12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to Line Display for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface LineDisplayControl12 extends BaseControl
+{
+    // Capabilities
+    public int     getCapBlink() throws JposException;
+    public boolean getCapBrightness() throws JposException;
+    public int     getCapCharacterSet() throws JposException;
+    public boolean getCapDescriptors() throws JposException;
+    public boolean getCapHMarquee() throws JposException;
+    public boolean getCapICharWait() throws JposException;
+    public boolean getCapVMarquee() throws JposException;
+
+    // Properties
+    public int     getCharacterSet() throws JposException;
+    public void    setCharacterSet(int characterSet) throws JposException;
+    public String  getCharacterSetList() throws JposException;
+    public int     getColumns() throws JposException;
+    public int     getCurrentWindow() throws JposException;
+    public void    setCurrentWindow(int currentWindow) throws JposException;
+    public int     getCursorColumn() throws JposException;
+    public void    setCursorColumn(int cursorColumn) throws JposException;
+    public int     getCursorRow() throws JposException;
+    public void    setCursorRow(int cursorRow) throws JposException;
+    public boolean getCursorUpdate() throws JposException;
+    public void    setCursorUpdate(boolean cursorUpdate) throws JposException;
+    public int     getDeviceBrightness() throws JposException;
+    public void    setDeviceBrightness(int deviceBrightness)
+                       throws JposException;
+    public int     getDeviceColumns() throws JposException;
+    public int     getDeviceDescriptors() throws JposException;
+    public int     getDeviceRows() throws JposException;
+    public int     getDeviceWindows() throws JposException;
+    public int     getInterCharacterWait() throws JposException;
+    public void    setInterCharacterWait(int interCharacterWait)
+                       throws JposException;
+    public int     getMarqueeFormat() throws JposException;
+    public void    setMarqueeFormat(int marqueeFormat) throws JposException;
+    public int     getMarqueeRepeatWait() throws JposException;
+    public void    setMarqueeRepeatWait(int marqueeRepeatWait)
+                       throws JposException;
+    public int     getMarqueeType() throws JposException;
+    public void    setMarqueeType(int marqueeType) throws JposException;
+    public int     getMarqueeUnitWait() throws JposException;
+    public void    setMarqueeUnitWait(int marqueeUnitWait)
+                       throws JposException;
+    public int     getRows() throws JposException;
+
+    // Methods
+    public void    clearDescriptors() throws JposException;
+    public void    clearText() throws JposException;
+    public void    createWindow(int viewportRow, int viewportColumn,
+                       int viewportHeight, int viewportWidth, int windowHeight,
+                       int windowWidth) throws JposException;
+    public void    destroyWindow() throws JposException;
+    public void    displayText(String data, int attribute)
+                       throws JposException;
+    public void    displayTextAt(int row, int column, String data,
+                       int attribute) throws JposException;
+    public void    refreshWindow(int window) throws JposException;
+    public void    scrollText(int direction, int units) throws JposException;
+    public void    setDescriptor(int descriptor, int attribute)
+                       throws JposException;
+
+    // Event listener methods
+    public void    addDirectIOListener(DirectIOListener l);
+    public void    removeDirectIOListener(DirectIOListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl13.java b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl13.java
new file mode 100644
index 0000000..f454314
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl13.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayControl13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Line Display for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface LineDisplayControl13 extends LineDisplayControl12
+{
+    // Capabilities
+  public int     getCapPowerReporting() throws JposException;
+
+    // Properties
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+
+    // Event listener methods
+    public void    addStatusUpdateListener(StatusUpdateListener l);
+    public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl14.java b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl14.java
new file mode 100644
index 0000000..f757910
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayControl14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Line Display for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface LineDisplayControl14 extends LineDisplayControl13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl15.java b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl15.java
new file mode 100644
index 0000000..658799e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl15.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayControl15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Line Display for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 00-04-17 JavaPOS Release 1.5                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface LineDisplayControl15 extends LineDisplayControl14
+{
+  // Nothing new added for release 1.5
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl16.java b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl16.java
new file mode 100644
index 0000000..d838bdd
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl16.java
@@ -0,0 +1,50 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayControl16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Line Display for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-04-18 JavaPOS Release 1.6                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface LineDisplayControl16 extends LineDisplayControl15
+{
+    // Capabilities
+    public boolean getCapBlinkRate() throws JposException;
+    public int     getCapCursorType() throws JposException;
+    public boolean getCapCustomGlyph() throws JposException;
+    public int     getCapReadBack() throws JposException;
+    public int     getCapReverse() throws JposException;
+
+    // Properties
+    public int     getBlinkRate() throws JposException;
+    public void    setBlinkRate(int blinkRate) throws JposException;
+    public int     getCursorType() throws JposException;
+    public void    setCursorType(int cursorType) throws JposException;
+    public String  getCustomGlyphList() throws JposException;
+    public int     getGlyphHeight() throws JposException;
+    public int     getGlyphWidth() throws JposException;
+
+    // Methods
+    public void    defineGlyph(int glyphCode, byte[] glyph)
+                       throws JposException;
+    public void    readCharacterAtCursor(int[] aChar) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl17.java b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl17.java
new file mode 100644
index 0000000..5198239
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl17.java
@@ -0,0 +1,50 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayControl17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Line Display for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface LineDisplayControl17 extends LineDisplayControl16
+{
+  // Capabilities
+  public boolean getCapBitmap() throws JposException;
+  public boolean getCapMapCharacterSet() throws JposException;
+  public boolean getCapScreenMode() throws JposException;
+
+  // Properties
+  public boolean getMapCharacterSet() throws JposException;
+  public void    setMapCharacterSet(boolean mapCharacterSet)
+                   throws JposException;
+  public int     getMaximumX() throws JposException;
+  public int     getMaximumY() throws JposException;
+  public int     getScreenMode() throws JposException;
+  public void    setScreenMode(int screenMode) throws JposException;
+  public String  getScreenModeList() throws JposException;
+
+  // Methods
+  public void    displayBitmap(String fileName, int width, int alignmentX,
+                               int alignmentY) throws JposException;
+  public void    setBitmap(int bitmapNumber, String fileName, int width,
+                           int alignmentX, int alignmentY) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl18.java b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl18.java
new file mode 100644
index 0000000..e7f0d51
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl18.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayControl18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Line Display for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface LineDisplayControl18 extends LineDisplayControl17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl19.java b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl19.java
new file mode 100644
index 0000000..9decc98
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/LineDisplayControl19.java
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayControl19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Line Display for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface LineDisplayControl19 extends LineDisplayControl18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MICR.java b/org.eclipse.osbp.fork.jpos/src/jpos/MICR.java
new file mode 100644
index 0000000..878bc2d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MICR.java
@@ -0,0 +1,1401 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICR.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class MICR
+  extends BaseJposControl
+  implements MICRControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected MICRService12 service12;
+  protected MICRService13 service13;
+  protected MICRService14 service14;
+  protected MICRService15 service15;
+  protected MICRService16 service16;
+  protected MICRService17 service17;
+  protected MICRService18 service18;
+  protected MICRService19 service19;
+  protected MICRService110 service110;
+  protected MICRService111 service111;
+  protected MICRService112 service112;
+  protected MICRService113 service113;
+  protected MICRService114 service114;
+  protected Vector dataListeners;
+  protected Vector directIOListeners;
+  protected Vector errorListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public MICR()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS MICR Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service12 = null;
+    //service13 = null;
+    //service14 = null;
+    //service15 = null;
+    //service16 = null;
+    //service17 = null;
+    //service18 = null;
+    //service19 = null;
+    //service110 = null;
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    dataListeners = new Vector();
+    directIOListeners = new Vector();
+    errorListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapValidationDevice()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapValidationDevice();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public boolean getAutoDisable()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getAutoDisable();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAutoDisable(boolean autoDisable)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setAutoDisable(autoDisable);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getAccountNumber()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getAccountNumber();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getAmount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getAmount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getBankNumber()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getBankNumber();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCheckType()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCheckType();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCountryCode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCountryCode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDataCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getDataCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getDataEventEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getDataEventEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDataEventEnabled(boolean dataEventEnabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setDataEventEnabled(dataEventEnabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getEPC()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getEPC();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getRawData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getRawData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getSerialNumber()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getSerialNumber();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getTransitNumber()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getTransitNumber();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void beginInsertion(int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.beginInsertion(timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void beginRemoval(int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.beginRemoval(timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearInput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.clearInput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void endInsertion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.endInsertion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void endRemoval()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.endRemoval();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearInputProperties()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.10.0
+    if(serviceVersion < deviceVersion110)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.10.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.clearInputProperties();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new MICRCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service12 = null;
+      service13 = null;
+      service14 = null;
+      service15 = null;
+      service16 = null;
+      service17 = null;
+      service18 = null;
+      service19 = null;
+      service110 = null;
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion12)
+      {
+        try
+        {
+          service12 = (MICRService12)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MICRService12 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion13)
+      {
+        try
+        {
+          service13 = (MICRService13)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MICRService13 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion14)
+      {
+        try
+        {
+          service14 = (MICRService14)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MICRService14 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion15)
+      {
+        try
+        {
+          service15 = (MICRService15)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MICRService15 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion16)
+      {
+        try
+        {
+          service16 = (MICRService16)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MICRService16 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion17)
+      {
+        try
+        {
+          service17 = (MICRService17)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MICRService17 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion18)
+      {
+        try
+        {
+          service18 = (MICRService18)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MICRService18 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion19)
+      {
+        try
+        {
+          service19 = (MICRService19)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MICRService19 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion110)
+      {
+        try
+        {
+          service110 = (MICRService110)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MICRService110 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (MICRService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MICRService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (MICRService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MICRService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (MICRService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MICRService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (MICRService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MICRService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.addElement(l);
+    }
+  }
+
+  public void removeDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.removeElement(l);
+    }
+  }
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.addElement(l);
+    }
+  }
+
+  public void removeErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class MICRCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)MICR.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+      synchronized(MICR.this.dataListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < dataListeners.size(); x++)
+        {
+          ((DataListener)dataListeners.elementAt(x)).dataOccurred(e);
+        }
+      }
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(MICR.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+      synchronized(MICR.this.errorListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < errorListeners.size(); x++)
+        {
+          ((ErrorListener)errorListeners.elementAt(x)).errorOccurred(e);
+        }
+      }
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(MICR.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MICR.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/MICR.manifest.stub
new file mode 100644
index 0000000..1aa3278
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MICR.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/MICR.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MICRBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/MICRBeanInfo.java
new file mode 100644
index 0000000..bc7af16
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MICRBeanInfo.java
@@ -0,0 +1,103 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// MICRBeanInfo.java - Bean information for the JavaPOS MICR
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class MICRBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.MICR.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.MICR.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapValidationDevice"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapUpdateFirmware"),
+
+        // Properties
+        makeProperty("AutoDisable"),
+        makeProperty("AccountNumber"),
+        makeProperty("Amount"),
+        makeProperty("BankNumber"),
+        makeProperty("CheckType"),
+        makeProperty("CountryCode"),
+        makeProperty("DataCount"),
+        makeProperty("DataEventEnabled"),
+        makeProperty("EPC"),
+        makeProperty("RawData"),
+        makeProperty("SerialNumber"),
+        makeProperty("TransitNumber"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState")
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.MICR.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("Data"),
+        makeEvent("DirectIO"),
+        makeEvent("Error"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MICRConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/MICRConst.java
new file mode 100644
index 0000000..3c72bd8
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MICRConst.java
@@ -0,0 +1,73 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRConst
+//
+//   MICR constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+// 2009-Feb-23 JavaPOS Release 1.13                               BS
+//   Added "CountryCode"constants:
+//     MICR_CC_CMC7
+//     MICR_CC_OTHER
+// 2009-Oct-06 JavaPOS Release 1.13.1                             BS
+//   Corrected value of "CountryCode"constant MICR_CC_OTHER.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface MICRConst
+{
+    //###################################################################
+    //#### MICR Constants
+    //###################################################################
+
+    /////////////////////////////////////////////////////////////////////
+    // "CheckType" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int MICR_CT_PERSONAL     =  1;
+    public static final int MICR_CT_BUSINESS     =  2;
+    public static final int MICR_CT_UNKNOWN      = 99;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "CountryCode" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int MICR_CC_USA          =  1;
+    public static final int MICR_CC_CANADA       =  2;
+    public static final int MICR_CC_MEXICO       =  3;
+    public static final int MICR_CC_CMC7         =  4; // Added in 1.13
+    public static final int MICR_CC_OTHER        =  5; // Added in 1.13
+    public static final int MICR_CC_UNKNOWN      = 99;
+
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "ResultCodeExtended" Property Constants for MICR
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int JPOS_EMICR_NOCHECK    = 1 + JposConst.JPOSERREXT; // EndInsertion
+    public static final int JPOS_EMICR_CHECK      = 2 + JposConst.JPOSERREXT; // EndRemoval
+
+    // The following were added in Release 1.7
+    public static final int JPOS_EMICR_BADDATA    = 3 + JposConst.JPOSERREXT;
+    public static final int JPOS_EMICR_NODATA     = 4 + JposConst.JPOSERREXT;
+    public static final int JPOS_EMICR_BADSIZE    = 5 + JposConst.JPOSERREXT;
+    public static final int JPOS_EMICR_JAM        = 6 + JposConst.JPOSERREXT;
+    public static final int JPOS_EMICR_CHECKDIGIT = 7 + JposConst.JPOSERREXT;
+    public static final int JPOS_EMICR_COVEROPEN  = 8 + JposConst.JPOSERREXT;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl110.java b/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl110.java
new file mode 100644
index 0000000..ce30de9
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl110.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRControl110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MICR for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MICRControl110 extends MICRControl19
+{
+  // Methods
+  public void    clearInputProperties()
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl111.java
new file mode 100644
index 0000000..531e0db
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MICR for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MICRControl111 extends MICRControl110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl112.java
new file mode 100644
index 0000000..b32f741
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MICR for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MICRControl112 extends MICRControl111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl113.java
new file mode 100644
index 0000000..049545a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MICR for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MICRControl113 extends MICRControl112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl114.java
new file mode 100644
index 0000000..98e7178
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to MICR for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MICRControl114 extends MICRControl113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl12.java b/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl12.java
new file mode 100644
index 0000000..330dd76
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl12.java
@@ -0,0 +1,64 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRControl12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to MICR for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MICRControl12 extends BaseControl
+{
+    // Capabilities
+    public boolean getCapValidationDevice() throws JposException;
+
+    // Properties
+    public boolean getAutoDisable() throws JposException;
+    public void    setAutoDisable(boolean autoDisable) throws JposException;
+    public String  getAccountNumber() throws JposException;
+    public String  getAmount() throws JposException;
+    public String  getBankNumber() throws JposException;
+    public int     getCheckType() throws JposException;
+    public int     getCountryCode() throws JposException;
+    public int     getDataCount() throws JposException;
+    public boolean getDataEventEnabled() throws JposException;
+    public void    setDataEventEnabled(boolean dataEventEnabled)
+                       throws JposException;
+    public String  getEPC() throws JposException;
+    public String  getRawData() throws JposException;
+    public String  getSerialNumber() throws JposException;
+    public String  getTransitNumber() throws JposException;
+
+    // Methods
+    public void    beginInsertion(int timeout) throws JposException;
+    public void    beginRemoval(int timeout) throws JposException;
+    public void    clearInput() throws JposException;
+    public void    endInsertion() throws JposException;
+    public void    endRemoval() throws JposException;
+
+    // Event listener methods
+    public void    addDataListener(DataListener l);
+    public void    removeDataListener(DataListener l);
+    public void    addDirectIOListener(DirectIOListener l);
+    public void    removeDirectIOListener(DirectIOListener l);
+    public void    addErrorListener(ErrorListener l);
+    public void    removeErrorListener(ErrorListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl13.java b/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl13.java
new file mode 100644
index 0000000..eefcd89
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl13.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRControl13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MICR for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MICRControl13 extends MICRControl12
+{
+    // Capabilities
+  public int     getCapPowerReporting() throws JposException;
+
+    // Properties
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+
+    // Event listener methods
+    public void    addStatusUpdateListener(StatusUpdateListener l);
+    public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl14.java b/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl14.java
new file mode 100644
index 0000000..9606d9b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRControl14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MICR for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MICRControl14 extends MICRControl13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl15.java b/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl15.java
new file mode 100644
index 0000000..90b9dca
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl15.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRControl15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MICR for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 00-04-17 JavaPOS Release 1.5                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MICRControl15 extends MICRControl14
+{
+  // Nothing new added for release 1.5
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl16.java b/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl16.java
new file mode 100644
index 0000000..665c072
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl16.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRControl16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MICR for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-04-18 JavaPOS Release 1.6                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MICRControl16 extends MICRControl15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl17.java b/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl17.java
new file mode 100644
index 0000000..10ef907
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl17.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRControl17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MICR for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MICRControl17 extends MICRControl16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl18.java b/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl18.java
new file mode 100644
index 0000000..a908fe8
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl18.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRControl18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MICR for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MICRControl18 extends MICRControl17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl19.java b/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl19.java
new file mode 100644
index 0000000..3296363
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MICRControl19.java
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRControl19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MICR for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MICRControl19 extends MICRControl18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MSR.java b/org.eclipse.osbp.fork.jpos/src/jpos/MSR.java
new file mode 100644
index 0000000..9fa3a87
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MSR.java
@@ -0,0 +1,2899 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSR.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class MSR
+  extends BaseJposControl
+  implements MSRControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected MSRService12 service12;
+  protected MSRService13 service13;
+  protected MSRService14 service14;
+  protected MSRService15 service15;
+  protected MSRService16 service16;
+  protected MSRService17 service17;
+  protected MSRService18 service18;
+  protected MSRService19 service19;
+  protected MSRService110 service110;
+  protected MSRService111 service111;
+  protected MSRService112 service112;
+  protected MSRService113 service113;
+  protected MSRService114 service114;
+  protected Vector dataListeners;
+  protected Vector directIOListeners;
+  protected Vector errorListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public MSR()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS MSR Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service12 = null;
+    //service13 = null;
+    //service14 = null;
+    //service15 = null;
+    //service16 = null;
+    //service17 = null;
+    //service18 = null;
+    //service19 = null;
+    //service110 = null;
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    dataListeners = new Vector();
+    directIOListeners = new Vector();
+    errorListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapISO()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapISO();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapJISOne()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapJISOne();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapJISTwo()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapJISTwo();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapTransmitSentinels()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapTransmitSentinels();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapWritableTracks()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.10.0
+    if(serviceVersion < deviceVersion110)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.10.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getCapWritableTracks();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getCapCardAuthentication()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapCardAuthentication();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapDataEncryption()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapDataEncryption();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapDeviceAuthentication()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapDeviceAuthentication();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapTrackDataMasking()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapTrackDataMasking();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public String getAccountNumber()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getAccountNumber();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getAutoDisable()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getAutoDisable();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAutoDisable(boolean autoDisable)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setAutoDisable(autoDisable);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDataCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getDataCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getDataEventEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getDataEventEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDataEventEnabled(boolean dataEventEnabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setDataEventEnabled(dataEventEnabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getDecodeData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getDecodeData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDecodeData(boolean decodeData)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setDecodeData(decodeData);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getErrorReportingType()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getErrorReportingType();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setErrorReportingType(int errorReportingType)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setErrorReportingType(errorReportingType);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getExpirationDate()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getExpirationDate();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getFirstName()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getFirstName();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getMiddleInitial()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getMiddleInitial();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getParseDecodeData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getParseDecodeData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setParseDecodeData(boolean parseDecodeData)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setParseDecodeData(parseDecodeData);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getServiceCode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getServiceCode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getSuffix()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getSuffix();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getSurname()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getSurname();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getTitle()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getTitle();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public byte[] getTrack1Data()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getTrack1Data();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public byte[] getTrack1DiscretionaryData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getTrack1DiscretionaryData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public byte[] getTrack2Data()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getTrack2Data();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public byte[] getTrack2DiscretionaryData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getTrack2DiscretionaryData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public byte[] getTrack3Data()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getTrack3Data();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getTracksToRead()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getTracksToRead();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setTracksToRead(int tracksToRead)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setTracksToRead(tracksToRead);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public byte[] getTrack4Data()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getTrack4Data();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getTransmitSentinels()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getTransmitSentinels();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setTransmitSentinels(boolean transmitSentinels)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.setTransmitSentinels(transmitSentinels);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getEncodingMaxLength()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.10.0
+    if(serviceVersion < deviceVersion110)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.10.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getEncodingMaxLength();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getTracksToWrite()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.10.0
+    if(serviceVersion < deviceVersion110)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.10.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service110.getTracksToWrite();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setTracksToWrite(int tracks)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.10.0
+    if(serviceVersion < deviceVersion110)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.10.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.setTracksToWrite(tracks);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public byte[] getAdditionalSecurityInformation()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getAdditionalSecurityInformation();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public byte[] getCardAuthenticationData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCardAuthenticationData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCardAuthenticationDataLength()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCardAuthenticationDataLength();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getCardPropertyList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCardPropertyList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getCardType()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCardType();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getCardTypeList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCardTypeList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDataEncryptionAlgorithm()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getDataEncryptionAlgorithm();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDataEncryptionAlgorithm(int encryptAlgorithm)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setDataEncryptionAlgorithm(encryptAlgorithm);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getDeviceAuthenticated()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getDeviceAuthenticated();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDeviceAuthenticationProtocol()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getDeviceAuthenticationProtocol();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public byte[] getTrack1EncryptedData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getTrack1EncryptedData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getTrack1EncryptedDataLength()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getTrack1EncryptedDataLength();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public byte[] getTrack2EncryptedData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getTrack2EncryptedData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getTrack2EncryptedDataLength()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getTrack2EncryptedDataLength();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public byte[] getTrack3EncryptedData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getTrack3EncryptedData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getTrack3EncryptedDataLength()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getTrack3EncryptedDataLength();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public byte[] getTrack4EncryptedData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getTrack4EncryptedData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getTrack4EncryptedDataLength()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getTrack4EncryptedDataLength();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getWriteCardType()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getWriteCardType();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setWriteCardType(String cardType)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setWriteCardType(cardType);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void clearInput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.clearInput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearInputProperties()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.10.0
+    if(serviceVersion < deviceVersion110)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.10.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.clearInputProperties();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void writeTracks(byte[][] data, int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.10.0
+    if(serviceVersion < deviceVersion110)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.10.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.writeTracks(data, timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void authenticateDevice(byte[] response)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.authenticateDevice(response);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void deauthenticateDevice(byte[] response)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.deauthenticateDevice(response);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveCardProperty(String name, String[] value)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.retrieveCardProperty(name, value);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveDeviceAuthenticationData(byte[] challenge)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.retrieveDeviceAuthenticationData(challenge);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateKey(String key, String keyName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.12.0
+    if(serviceVersion < deviceVersion112)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.12.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.updateKey(key, keyName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveDeviceAuthenticationData(byte[][] challenge)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.13.0
+    if(serviceVersion < deviceVersion113)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.13.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service113.retrieveDeviceAuthenticationData(challenge);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new MSRCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service12 = null;
+      service13 = null;
+      service14 = null;
+      service15 = null;
+      service16 = null;
+      service17 = null;
+      service18 = null;
+      service19 = null;
+      service110 = null;
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion12)
+      {
+        try
+        {
+          service12 = (MSRService12)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MSRService12 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion13)
+      {
+        try
+        {
+          service13 = (MSRService13)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MSRService13 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion14)
+      {
+        try
+        {
+          service14 = (MSRService14)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MSRService14 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion15)
+      {
+        try
+        {
+          service15 = (MSRService15)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MSRService15 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion16)
+      {
+        try
+        {
+          service16 = (MSRService16)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MSRService16 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion17)
+      {
+        try
+        {
+          service17 = (MSRService17)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MSRService17 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion18)
+      {
+        try
+        {
+          service18 = (MSRService18)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MSRService18 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion19)
+      {
+        try
+        {
+          service19 = (MSRService19)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MSRService19 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion110)
+      {
+        try
+        {
+          service110 = (MSRService110)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MSRService110 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (MSRService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MSRService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (MSRService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MSRService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (MSRService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MSRService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (MSRService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MSRService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.addElement(l);
+    }
+  }
+
+  public void removeDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.removeElement(l);
+    }
+  }
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.addElement(l);
+    }
+  }
+
+  public void removeErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class MSRCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)MSR.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+      synchronized(MSR.this.dataListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < dataListeners.size(); x++)
+        {
+          ((DataListener)dataListeners.elementAt(x)).dataOccurred(e);
+        }
+      }
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(MSR.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+      synchronized(MSR.this.errorListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < errorListeners.size(); x++)
+        {
+          ((ErrorListener)errorListeners.elementAt(x)).errorOccurred(e);
+        }
+      }
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(MSR.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MSR.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/MSR.manifest.stub
new file mode 100644
index 0000000..e03b4c9
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MSR.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/MSR.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MSRBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/MSRBeanInfo.java
new file mode 100644
index 0000000..19b3139
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MSRBeanInfo.java
@@ -0,0 +1,142 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// MSRBeanInfo.java - Bean information for the JavaPOS MSR
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class MSRBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.MSR.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.MSR.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapISO"),
+        makeProperty("CapJISOne"),
+        makeProperty("CapJISTwo"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapTransmitSentinels"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapUpdateFirmware"),
+        makeProperty("CapWritableTracks"),
+        makeProperty("CapCardAuthentication"),
+        makeProperty("CapDataEncryption"),
+        makeProperty("CapDeviceAuthentication"),
+        makeProperty("CapTrackDataMasking"),
+
+        // Properties
+        makeProperty("AccountNumber"),
+        makeProperty("AutoDisable"),
+        makeProperty("DataCount"),
+        makeProperty("DataEventEnabled"),
+        makeProperty("DecodeData"),
+        makeProperty("ErrorReportingType"),
+        makeProperty("ExpirationDate"),
+        makeProperty("FirstName"),
+        makeProperty("MiddleInitial"),
+        makeProperty("ParseDecodeData"),
+        makeProperty("ServiceCode"),
+        makeProperty("Suffix"),
+        makeProperty("Surname"),
+        makeProperty("Title"),
+        makeProperty("Track1Data"),
+        makeProperty("Track1DiscretionaryData"),
+        makeProperty("Track2Data"),
+        makeProperty("Track2DiscretionaryData"),
+        makeProperty("Track3Data"),
+        makeProperty("TracksToRead"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState"),
+        makeProperty("Track4Data"),
+        makeProperty("TransmitSentinels"),
+        makeProperty("EncodingMaxLength"),
+        makeProperty("TracksToWrite"),
+        makeProperty("AdditionalSecurityInformation"),
+        makeProperty("CardAuthenticationData"),
+        makeProperty("CardAuthenticationDataLength"),
+        makeProperty("CardPropertyList"),
+        makeProperty("CardType"),
+        makeProperty("CardTypeList"),
+        makeProperty("DataEncryptionAlgorithm"),
+        makeProperty("DeviceAuthenticated"),
+        makeProperty("DeviceAuthenticationProtocol"),
+        makeProperty("Track1EncryptedData"),
+        makeProperty("Track1EncryptedDataLength"),
+        makeProperty("Track2EncryptedData"),
+        makeProperty("Track2EncryptedDataLength"),
+        makeProperty("Track3EncryptedData"),
+        makeProperty("Track3EncryptedDataLength"),
+        makeProperty("Track4EncryptedData"),
+        makeProperty("Track4EncryptedDataLength"),
+        makeProperty("WriteCardType"),
+
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.MSR.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("Data"),
+        makeEvent("DirectIO"),
+        makeEvent("Error"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MSRConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/MSRConst.java
new file mode 100644
index 0000000..b369eb0
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MSRConst.java
@@ -0,0 +1,163 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRConst
+//
+//   MSR constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 1998-Feb-18 JavaPOS Release 1.2                                 BS
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//   Added Property values:
+//     MSR_DE_NONE
+//     MSR_DE_3DEA_DUKPT
+//     MSR_DA_NOT_SUPPORTED
+//     MSR_DA_OPTIONAL
+//     MSR_DA_REQUIRED
+//     MSR_AP_NONE
+//     MSR_AP_CHALLENGERESPONSE
+//   Added Extended Error values:
+//     MSR_SUE_DEVICE_AUTHENTICATED
+//     MSR_SUE_DEVICE_DEAUTHENTICATED
+//   Added Status Update Event values:
+//     JPOS_EMSR_DEVICE_AUTHENTICATION_FAILED
+//     JPOS_EMSR_DEVICE_DEAUTHENTICATION_FAILED
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface MSRConst
+{
+    //###################################################################
+    //#### MSR Constants
+    //###################################################################
+
+    /////////////////////////////////////////////////////////////////////
+    // "TracksToRead" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int MSR_TR_NONE      = 0;
+
+    public static final int MSR_TR_1         = 1;
+    public static final int MSR_TR_2         = 2;
+    public static final int MSR_TR_3         = 4;
+    public static final int MSR_TR_4         = 8;
+
+    public static final int MSR_TR_1_2       = MSR_TR_1 | MSR_TR_2;
+    public static final int MSR_TR_1_3       = MSR_TR_1 | MSR_TR_3;
+    public static final int MSR_TR_1_4       = MSR_TR_1 | MSR_TR_4;
+    public static final int MSR_TR_2_3       = MSR_TR_2 | MSR_TR_3;
+    public static final int MSR_TR_2_4       = MSR_TR_2 | MSR_TR_4;
+    public static final int MSR_TR_3_4       = MSR_TR_3 | MSR_TR_4;
+
+    public static final int MSR_TR_1_2_3     = MSR_TR_1 | MSR_TR_2 | MSR_TR_3;
+    public static final int MSR_TR_1_2_4     = MSR_TR_1 | MSR_TR_2 | MSR_TR_4;
+    public static final int MSR_TR_1_3_4     = MSR_TR_1 | MSR_TR_3 | MSR_TR_4;
+    public static final int MSR_TR_2_3_4     = MSR_TR_2 | MSR_TR_3 | MSR_TR_4;
+
+    public static final int MSR_TR_1_2_3_4   = MSR_TR_1 | MSR_TR_2 |
+                                               MSR_TR_3 | MSR_TR_4;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "ErrorReportingType" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int MSR_ERT_CARD         = 0;
+    public static final int MSR_ERT_TRACK        = 1;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "CapDataEncryption", "DataEncryptionAlgorithm" Property Constants
+    //   (added in 1.12)
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int MSR_DE_NONE          = 0x00000001;
+    public static final int MSR_DE_3DEA_DUKPT    = 0x00000002;
+    // Note: Service-specific values begin at 0x01000000.
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "CapDeviceAuthentication" Property Constants (added in 1.12)
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int MSR_DA_NOT_SUPPORTED = 0;
+    public static final int MSR_DA_OPTIONAL      = 1;
+    public static final int MSR_DA_REQUIRED      = 2;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "DeviceAuthenticationProtocol" Property Constants (added in 1.12)
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int MSR_AP_NONE              = 0;
+    public static final int MSR_AP_CHALLENGERESPONSE = 1;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "CardType" Property Constants (added in 1.12)
+    /////////////////////////////////////////////////////////////////////
+
+    public static final String MSR_CT_AAMVA = "AAMVA";
+    public static final String MSR_CT_BANK  = "BANK";
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "retrieveCardProperty" Parameter Constants (added in 1.12)
+    /////////////////////////////////////////////////////////////////////
+
+    public static final String MSR_RCP_AccountNumber  = "AccountNumber";
+    public static final String MSR_RCP_Address        = "Address";
+    public static final String MSR_RCP_BirthDate      = "BirthDate";
+    public static final String MSR_RCP_City           = "City";
+    public static final String MSR_RCP_Class          = "Class";
+    public static final String MSR_RCP_Endorsements   = "Endorsements";
+    public static final String MSR_RCP_ExpirationDate = "ExpirationDate";
+    public static final String MSR_RCP_EyeColor       = "EyeColor";
+    public static final String MSR_RCP_FirstName      = "FirstName";
+    public static final String MSR_RCP_Gender         = "Gender";
+    public static final String MSR_RCP_HairColor      = "HairColor";
+    public static final String MSR_RCP_Height         = "Height";
+    public static final String MSR_RCP_LicenseNumber  = "LicenseNumber";
+    public static final String MSR_RCP_MiddleInitial  = "MiddleInitial";
+    public static final String MSR_RCP_PostalCode     = "PostalCode";
+    public static final String MSR_RCP_Restrictions   = "Restrictions";
+    public static final String MSR_RCP_ServiceCode    = "ServiceCode";
+    public static final String MSR_RCP_State          = "State";
+    public static final String MSR_RCP_Suffix         = "Suffix";
+    public static final String MSR_RCP_Surname        = "Surname";
+    public static final String MSR_RCP_Title          = "Title";
+    public static final String MSR_RCP_Weight         = "Weight";
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "StatusUpdateEvent" Event: "Data" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int MSR_SUE_DEVICE_AUTHENTICATED     =  11; // 1.12
+    public static final int MSR_SUE_DEVICE_DEAUTHENTICATED   =  12; // 1.12
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "ErrorEvent" Event: "ResultCodeExtended" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int JPOS_EMSR_START      = 1 + JposConst.JPOSERREXT;
+    public static final int JPOS_EMSR_END        = 2 + JposConst.JPOSERREXT;
+    public static final int JPOS_EMSR_PARITY     = 3 + JposConst.JPOSERREXT;
+    public static final int JPOS_EMSR_LRC        = 4 + JposConst.JPOSERREXT;
+    public static final int JPOS_EMSR_DEVICE_AUTHENTICATION_FAILED   = 5 + JposConst.JPOSERREXT; // 1.12
+    public static final int JPOS_EMSR_DEVICE_DEAUTHENTICATION_FAILED = 6 + JposConst.JPOSERREXT; // 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl110.java b/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl110.java
new file mode 100644
index 0000000..aa92801
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl110.java
@@ -0,0 +1,51 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRControl110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MSR for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-08 JavaPOS Release 1.10                                BS
+// 2006-Oct-23 JavaPOS 1.10.2 Update                               BS
+//   Fixed type of writeTracks data parameter to be byte[][] as
+//   UnifiedPOS has corrected the type from "string" to
+//   "array of binary".
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MSRControl110 extends MSRControl19
+{
+  // Capabilities
+  public int     getCapWritableTracks()
+                     throws JposException;
+
+  // Properties
+  public int     getEncodingMaxLength()
+                     throws JposException;
+  public int     getTracksToWrite()
+                     throws JposException;
+  public void    setTracksToWrite(int tracks)
+                     throws JposException;
+
+  // Methods
+  public void    clearInputProperties()
+                     throws JposException;
+  public void    writeTracks(byte[][] data, int timeout)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl111.java
new file mode 100644
index 0000000..11b2425
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl111.java
@@ -0,0 +1,35 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MSR for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-08 JavaPOS release 1.11                                BS
+// 2006-Oct-23 JavaPOS 1.10.2 Update                               BS
+//   Fixed type of writeTracks data parameter to be byte[][] as
+//   UnifiedPOS has corrected the type from "string" to
+//   "array of binary".
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MSRControl111 extends MSRControl110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl112.java
new file mode 100644
index 0000000..9d4962b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl112.java
@@ -0,0 +1,71 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MSR for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MSRControl112 extends MSRControl111
+{
+  // Capabilities
+  public String  getCapCardAuthentication() throws JposException;
+  public int     getCapDataEncryption() throws JposException;
+  public int     getCapDeviceAuthentication() throws JposException;
+  public boolean getCapTrackDataMasking() throws JposException;
+
+  // Properties
+  public byte[]  getAdditionalSecurityInformation() throws JposException;
+  public byte[]  getCardAuthenticationData() throws JposException;
+  public int     getCardAuthenticationDataLength() throws JposException;
+  public String  getCardPropertyList() throws JposException;
+  public String  getCardType() throws JposException;
+  public String  getCardTypeList() throws JposException;
+  public int     getDataEncryptionAlgorithm() throws JposException;
+  public void    setDataEncryptionAlgorithm(int encryptAlgorithm) throws JposException;
+  public boolean getDeviceAuthenticated() throws JposException;
+  public int     getDeviceAuthenticationProtocol() throws JposException;
+  public byte[]  getTrack1EncryptedData() throws JposException;
+  public int     getTrack1EncryptedDataLength() throws JposException;
+  public byte[]  getTrack2EncryptedData() throws JposException;
+  public int     getTrack2EncryptedDataLength() throws JposException;
+  public byte[]  getTrack3EncryptedData() throws JposException;
+  public int     getTrack3EncryptedDataLength() throws JposException;
+  public byte[]  getTrack4EncryptedData() throws JposException;
+  public int     getTrack4EncryptedDataLength() throws JposException;
+  public String  getWriteCardType() throws JposException;
+  public void    setWriteCardType(String cardType) throws JposException;
+
+  // Methods
+  public void    authenticateDevice(byte[] response)
+                     throws JposException;
+  public void    deauthenticateDevice(byte[] response)
+                     throws JposException;
+  public void    retrieveCardProperty(String name,
+                                      String[] value)
+                     throws JposException;
+  public void    retrieveDeviceAuthenticationData(byte[] challenge)
+                     throws JposException;
+  public void    updateKey(String key,
+                           String keyName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl113.java
new file mode 100644
index 0000000..e3bf247
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl113.java
@@ -0,0 +1,43 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MSR for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+// 2011-Nov-15 JavaPOS Release 1.13.3                              BS
+//   Added new retrieveDeviceAuthenticationData with correct
+//     parameter type. Old method left in place for compatibility.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MSRControl113 extends MSRControl112
+{
+  // The retrieveDeviceAuthenticationData method's challenge parameter
+  // was incorrectly typed as byte[] in version 1.12. Since the parameter
+  // is an in/out parameter, the type should be byte[][].
+  //
+  // The old version is left for Application and Device Service
+  // compatibility.
+
+  // Methods
+  public void    retrieveDeviceAuthenticationData(byte[][] challenge)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl114.java
new file mode 100644
index 0000000..9b69d94
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to MSR for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MSRControl114 extends MSRControl113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl12.java b/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl12.java
new file mode 100644
index 0000000..7773df9
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl12.java
@@ -0,0 +1,76 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRControl12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to MSR for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MSRControl12 extends BaseControl
+{
+    // Capabilities
+    public boolean getCapISO() throws JposException;
+    public boolean getCapJISOne() throws JposException;
+    public boolean getCapJISTwo() throws JposException;
+
+    // Properties
+    public String  getAccountNumber() throws JposException;
+    public boolean getAutoDisable() throws JposException;
+    public void    setAutoDisable(boolean autoDisable) throws JposException;
+    public int     getDataCount() throws JposException;
+    public boolean getDataEventEnabled() throws JposException;
+    public void    setDataEventEnabled(boolean dataEventEnabled)
+                       throws JposException;
+    public boolean getDecodeData() throws JposException;
+    public void    setDecodeData(boolean decodeData) throws JposException;
+    public int     getErrorReportingType() throws JposException;
+    public void    setErrorReportingType(int errorReportingType)
+                       throws JposException;
+    public String  getExpirationDate() throws JposException;
+    public String  getFirstName() throws JposException;
+    public String  getMiddleInitial() throws JposException;
+    public boolean getParseDecodeData() throws JposException;
+    public void    setParseDecodeData(boolean parseDecodeData)
+                       throws JposException;
+    public String  getServiceCode() throws JposException;
+    public String  getSuffix() throws JposException;
+    public String  getSurname() throws JposException;
+    public String  getTitle() throws JposException;
+    public byte[]  getTrack1Data() throws JposException;
+    public byte[]  getTrack1DiscretionaryData() throws JposException;
+    public byte[]  getTrack2Data() throws JposException;
+    public byte[]  getTrack2DiscretionaryData() throws JposException;
+    public byte[]  getTrack3Data() throws JposException;
+    public int     getTracksToRead() throws JposException;
+    public void    setTracksToRead(int tracksToRead) throws JposException;
+
+    // Methods
+    public void    clearInput() throws JposException;
+
+    // Event listener methods
+    public void    addDataListener(DataListener l);
+    public void    removeDataListener(DataListener l);
+    public void    addDirectIOListener(DirectIOListener l);
+    public void    removeDirectIOListener(DirectIOListener l);
+    public void    addErrorListener(ErrorListener l);
+    public void    removeErrorListener(ErrorListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl13.java b/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl13.java
new file mode 100644
index 0000000..f8bc0d8
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl13.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRControl13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MSR for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MSRControl13 extends MSRControl12
+{
+    // Capabilities
+  public int     getCapPowerReporting() throws JposException;
+
+    // Properties
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+
+    // Event listener methods
+    public void    addStatusUpdateListener(StatusUpdateListener l);
+    public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl14.java b/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl14.java
new file mode 100644
index 0000000..505578c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRControl14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MSR for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MSRControl14 extends MSRControl13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl15.java b/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl15.java
new file mode 100644
index 0000000..586c074
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl15.java
@@ -0,0 +1,38 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRControl15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MSR for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 00-04-17 JavaPOS Release 1.5                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MSRControl15 extends MSRControl14
+{
+  // Capabilities
+  public boolean getCapTransmitSentinels() throws JposException;
+
+  // Properties
+  public byte[]  getTrack4Data() throws JposException;
+  public boolean getTransmitSentinels() throws JposException;
+  public void    setTransmitSentinels(boolean transmitSentinels)
+  								 throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl16.java b/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl16.java
new file mode 100644
index 0000000..0dca6db
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl16.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRControl16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MSR for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-04-18 JavaPOS Release 1.6                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MSRControl16 extends MSRControl15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl17.java b/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl17.java
new file mode 100644
index 0000000..96b49a3
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl17.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRControl17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MSR for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MSRControl17 extends MSRControl16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl18.java b/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl18.java
new file mode 100644
index 0000000..ff84d10
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl18.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRControl18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MSR for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MSRControl18 extends MSRControl17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl19.java b/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl19.java
new file mode 100644
index 0000000..bc642b3
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MSRControl19.java
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRControl19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MSR for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MSRControl19 extends MSRControl18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensor.java b/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensor.java
new file mode 100644
index 0000000..d32e4a6
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensor.java
@@ -0,0 +1,804 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MotionSensor.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class MotionSensor
+  extends BaseJposControl
+  implements MotionSensorControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected MotionSensorService17 service17;
+  protected MotionSensorService18 service18;
+  protected MotionSensorService19 service19;
+  protected MotionSensorService110 service110;
+  protected MotionSensorService111 service111;
+  protected MotionSensorService112 service112;
+  protected MotionSensorService113 service113;
+  protected MotionSensorService114 service114;
+  protected Vector directIOListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public MotionSensor()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS MotionSensor Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service17 = null;
+    //service18 = null;
+    //service19 = null;
+    //service110 = null;
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    directIOListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public boolean getMotion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getMotion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getTimeout()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getTimeout();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setTimeout(int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.setTimeout(timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void waitForMotion(int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.waitForMotion(timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new MotionSensorCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service17 = null;
+      service18 = null;
+      service19 = null;
+      service110 = null;
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion17)
+      {
+        try
+        {
+          service17 = (MotionSensorService17)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MotionSensorService17 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion18)
+      {
+        try
+        {
+          service18 = (MotionSensorService18)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MotionSensorService18 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion19)
+      {
+        try
+        {
+          service19 = (MotionSensorService19)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MotionSensorService19 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion110)
+      {
+        try
+        {
+          service110 = (MotionSensorService110)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MotionSensorService110 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (MotionSensorService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MotionSensorService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (MotionSensorService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MotionSensorService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (MotionSensorService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MotionSensorService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (MotionSensorService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement MotionSensorService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class MotionSensorCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)MotionSensor.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(MotionSensor.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(MotionSensor.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensor.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensor.manifest.stub
new file mode 100644
index 0000000..84279c2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensor.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/MotionSensor.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorBeanInfo.java
new file mode 100644
index 0000000..596aa07
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorBeanInfo.java
@@ -0,0 +1,91 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// MotionSensorBeanInfo.java - Bean information for the JavaPOS MotionSensor
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class MotionSensorBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.MotionSensor.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.MotionSensor.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapUpdateFirmware"),
+
+        // Properties
+        makeProperty("Motion"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState"),
+        makeProperty("Timeout"),
+
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.MotionSensor.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("DirectIO"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorConst.java
new file mode 100644
index 0000000..ca1b626
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorConst.java
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MotionSensorConst
+//
+//   Motion Sensor constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface MotionSensorConst
+{
+    //###################################################################
+    //#### Motion Sensor Constants
+    //###################################################################
+
+    /////////////////////////////////////////////////////////////////////
+    // Status Update Event "Status" Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int MOTION_M_PRESENT      = 1;
+    public static final int MOTION_M_ABSENT       = 2;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorControl110.java b/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorControl110.java
new file mode 100644
index 0000000..7f16191
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorControl110.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MotionSensorControl110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Motion Sensor for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MotionSensorControl110 extends MotionSensorControl19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorControl111.java
new file mode 100644
index 0000000..06a96ad
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorControl111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MotionSensorControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Motion Sensor for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MotionSensorControl111 extends MotionSensorControl110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorControl112.java
new file mode 100644
index 0000000..9970ba2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorControl112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MotionSensorControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Motion Sensor for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MotionSensorControl112 extends MotionSensorControl111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorControl113.java
new file mode 100644
index 0000000..9333a1c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorControl113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MotionSensorControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Motion Sensor for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MotionSensorControl113 extends MotionSensorControl112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorControl114.java
new file mode 100644
index 0000000..844f4f2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MotionSensorControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Motion Sensor for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MotionSensorControl114 extends MotionSensorControl113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorControl17.java b/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorControl17.java
new file mode 100644
index 0000000..16959e8
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorControl17.java
@@ -0,0 +1,49 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MotionSensorControl17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Motion Sensor for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MotionSensorControl17 extends BaseControl
+{
+  // Capabilities
+  public int     getCapPowerReporting() throws JposException;
+
+  // Properties
+  public boolean getMotion() throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+  public int     getTimeout() throws JposException;
+  public void    setTimeout(int timeout) throws JposException;
+
+  // Methods
+  public void    waitForMotion(int timeout) throws JposException;
+
+  // Event listener methods
+  public void    addDirectIOListener(DirectIOListener l);
+  public void    removeDirectIOListener(DirectIOListener l);
+  public void    addStatusUpdateListener(StatusUpdateListener l);
+  public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorControl18.java b/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorControl18.java
new file mode 100644
index 0000000..3ac3348
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorControl18.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MotionSensorControl18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Motion Sensor for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MotionSensorControl18 extends MotionSensorControl17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorControl19.java b/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorControl19.java
new file mode 100644
index 0000000..4680a22
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/MotionSensorControl19.java
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MotionSensorControl19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Motion Sensor for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface MotionSensorControl19 extends MotionSensorControl18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PINPad.java b/org.eclipse.osbp.fork.jpos/src/jpos/PINPad.java
new file mode 100644
index 0000000..d22220e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PINPad.java
@@ -0,0 +1,2020 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PINPad.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class PINPad
+  extends BaseJposControl
+  implements PINPadControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected PINPadService13 service13;
+  protected PINPadService14 service14;
+  protected PINPadService15 service15;
+  protected PINPadService16 service16;
+  protected PINPadService17 service17;
+  protected PINPadService18 service18;
+  protected PINPadService19 service19;
+  protected PINPadService110 service110;
+  protected PINPadService111 service111;
+  protected PINPadService112 service112;
+  protected PINPadService113 service113;
+  protected PINPadService114 service114;
+  protected Vector dataListeners;
+  protected Vector directIOListeners;
+  protected Vector errorListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public PINPad()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS PINPad Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service13 = null;
+    //service14 = null;
+    //service15 = null;
+    //service16 = null;
+    //service17 = null;
+    //service18 = null;
+    //service19 = null;
+    //service110 = null;
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    dataListeners = new Vector();
+    directIOListeners = new Vector();
+    errorListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public int getCapDisplay()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapDisplay();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapLanguage()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapLanguage();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapKeyboard()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapKeyboard();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapMACCalculation()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapMACCalculation();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapTone()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapTone();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public String getAccountNumber()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getAccountNumber();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAccountNumber(String accountNumber)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setAccountNumber(accountNumber);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getAdditionalSecurityInformation()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getAdditionalSecurityInformation();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public long getAmount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getAmount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAmount(long amount)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setAmount(amount);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getAvailableLanguagesList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getAvailableLanguagesList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getAvailablePromptsList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getAvailablePromptsList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDataCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getDataCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getDataEventEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getDataEventEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDataEventEnabled(boolean dataEventEnabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setDataEventEnabled(dataEventEnabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getEncryptedPIN()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getEncryptedPIN();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getMaximumPINLength()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getMaximumPINLength();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setMaximumPINLength(int maximumPINLength)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setMaximumPINLength(maximumPINLength);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getMerchantID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getMerchantID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setMerchantID(String merchantID)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setMerchantID(merchantID);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getMinimumPINLength()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getMinimumPINLength();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setMinimumPINLength(int minimumPINLength)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setMinimumPINLength(minimumPINLength);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getPINEntryEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPINEntryEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPrompt()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPrompt();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPrompt(int propmpt)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setPrompt(propmpt);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getPromptLanguage()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPromptLanguage();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPromptLanguage(String promptLanguage)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setPromptLanguage(promptLanguage);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getTerminalID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getTerminalID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setTerminalID(String terminalID)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setTerminalID(terminalID);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public byte[] getTrack1Data()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getTrack1Data();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setTrack1Data(byte[] track1Data)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setTrack1Data(track1Data);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public byte[] getTrack2Data()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getTrack2Data();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setTrack2Data(byte[] track2Data)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setTrack2Data(track2Data);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public byte[] getTrack3Data()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getTrack3Data();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setTrack3Data(byte[] track3Data)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setTrack3Data(track3Data);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getTransactionType()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getTransactionType();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setTransactionType(int transactionType)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setTransactionType(transactionType);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public byte[] getTrack4Data()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getTrack4Data();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setTrack4Data(byte[] track4Data)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.setTrack4Data(track4Data);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void beginEFTTransaction(String PINPadSystem, int transactionHost)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.beginEFTTransaction(PINPadSystem, transactionHost);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearInput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.clearInput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void computeMAC(String inMsg, String[] outMsg)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.computeMAC(inMsg, outMsg);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void enablePINEntry()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.enablePINEntry();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void endEFTTransaction(int completionCode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.endEFTTransaction(completionCode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateKey(int keyNum, String key)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.updateKey(keyNum, key);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void verifyMAC(String message)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.verifyMAC(message);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearInputProperties()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.10.0
+    if(serviceVersion < deviceVersion110)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.10.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.clearInputProperties();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new PINPadCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service13 = null;
+      service14 = null;
+      service15 = null;
+      service16 = null;
+      service17 = null;
+      service18 = null;
+      service19 = null;
+      service110 = null;
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion13)
+      {
+        try
+        {
+          service13 = (PINPadService13)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement PINPadService13 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion14)
+      {
+        try
+        {
+          service14 = (PINPadService14)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement PINPadService14 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion15)
+      {
+        try
+        {
+          service15 = (PINPadService15)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement PINPadService15 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion16)
+      {
+        try
+        {
+          service16 = (PINPadService16)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement PINPadService16 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion17)
+      {
+        try
+        {
+          service17 = (PINPadService17)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement PINPadService17 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion18)
+      {
+        try
+        {
+          service18 = (PINPadService18)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement PINPadService18 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion19)
+      {
+        try
+        {
+          service19 = (PINPadService19)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement PINPadService19 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion110)
+      {
+        try
+        {
+          service110 = (PINPadService110)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement PINPadService110 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (PINPadService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement PINPadService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (PINPadService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement PINPadService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (PINPadService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement PINPadService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (PINPadService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement PINPadService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.addElement(l);
+    }
+  }
+
+  public void removeDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.removeElement(l);
+    }
+  }
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.addElement(l);
+    }
+  }
+
+  public void removeErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class PINPadCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)PINPad.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+      synchronized(PINPad.this.dataListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < dataListeners.size(); x++)
+        {
+          ((DataListener)dataListeners.elementAt(x)).dataOccurred(e);
+        }
+      }
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(PINPad.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+      synchronized(PINPad.this.errorListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < errorListeners.size(); x++)
+        {
+          ((ErrorListener)errorListeners.elementAt(x)).errorOccurred(e);
+        }
+      }
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(PINPad.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PINPad.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/PINPad.manifest.stub
new file mode 100644
index 0000000..5edf1af
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PINPad.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/PINPad.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PINPadBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadBeanInfo.java
new file mode 100644
index 0000000..4241670
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadBeanInfo.java
@@ -0,0 +1,116 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// PINPadBeanInfo.java - Bean information for the JavaPOS PINPad
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class PINPadBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.PINPad.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.PINPad.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapDisplay"),
+        makeProperty("CapLanguage"),
+        makeProperty("CapKeyboard"),
+        makeProperty("CapMACCalculation"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapTone"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapUpdateFirmware"),
+
+        // Properties
+        makeProperty("AccountNumber"),
+        makeProperty("AdditionalSecurityInformation"),
+        makeProperty("Amount"),
+        makeProperty("AvailableLanguagesList"),
+        makeProperty("AvailablePromptsList"),
+        makeProperty("DataCount"),
+        makeProperty("DataEventEnabled"),
+        makeProperty("EncryptedPIN"),
+        makeProperty("MaximumPINLength"),
+        makeProperty("MerchantID"),
+        makeProperty("MinimumPINLength"),
+        makeProperty("PINEntryEnabled"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState"),
+        makeProperty("Prompt"),
+        makeProperty("PromptLanguage"),
+        makeProperty("TerminalID"),
+        makeProperty("Track1Data"),
+        makeProperty("Track2Data"),
+        makeProperty("Track3Data"),
+        makeProperty("TransactionType"),
+        makeProperty("Track4Data"),
+
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.PINPad.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("Data"),
+        makeEvent("DirectIO"),
+        makeEvent("Error"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PINPadConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadConst.java
new file mode 100644
index 0000000..c7fbe88
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadConst.java
@@ -0,0 +1,97 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PINPadConst
+//
+//   PIN Pad constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface PINPadConst
+{
+    /////////////////////////////////////////////////////////////////////
+    // "CapDisplay" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PPAD_DISP_UNRESTRICTED          = 1;
+    public static final int PPAD_DISP_PINRESTRICTED         = 2;
+    public static final int PPAD_DISP_RESTRICTED_LIST       = 3;
+    public static final int PPAD_DISP_RESTRICTED_ORDER      = 4;
+    public static final int PPAD_DISP_NONE                  = 5;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "AvailablePromptsList" and "Prompt" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PPAD_MSG_ENTERPIN               = 1;
+    public static final int PPAD_MSG_PLEASEWAIT             = 2;
+    public static final int PPAD_MSG_ENTERVALIDPIN          = 3;
+    public static final int PPAD_MSG_RETRIESEXCEEDED        = 4;
+    public static final int PPAD_MSG_APPROVED               = 5;
+    public static final int PPAD_MSG_DECLINED               = 6;
+    public static final int PPAD_MSG_CANCELED               = 7;
+    public static final int PPAD_MSG_AMOUNTOK               = 8;
+    public static final int PPAD_MSG_NOTREADY               = 9;
+    public static final int PPAD_MSG_IDLE                   = 10;
+    public static final int PPAD_MSG_SLIDE_CARD             = 11;
+    public static final int PPAD_MSG_INSERTCARD             = 12;
+    public static final int PPAD_MSG_SELECTCARDTYPE         = 13;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "CapLanguage" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PPAD_LANG_NONE                  = 1;
+    public static final int PPAD_LANG_ONE                   = 2;
+    public static final int PPAD_LANG_PINRESTRICTED         = 3;
+    public static final int PPAD_LANG_UNRESTRICTED          = 4;
+
+    /////////////////////////////////////////////////////////////////////
+    // "TransactionType" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PPAD_TRANS_DEBIT                = 1;
+    public static final int PPAD_TRANS_CREDIT               = 2;
+    public static final int PPAD_TRANS_INQ                  = 3;
+    public static final int PPAD_TRANS_RECONCILE            = 4;
+    public static final int PPAD_TRANS_ADMIN                = 5;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "EndEFTTransaction" Method Completion Code Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PPAD_EFT_NORMAL                 = 1;
+    public static final int PPAD_EFT_ABNORMAL               = 2;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "DataEvent" Event Status Constants
+    /////////////////////////////////////////////////////////////////////
+    public static final int PPAD_SUCCESS                    = 1;
+    public static final int PPAD_CANCEL                     = 2;
+
+
+		/////////////////////////////////////////////////////////////////////
+		// "ErrorCodeExtended" Property Constants for PINPad
+		/////////////////////////////////////////////////////////////////////
+
+    public static final int JPOS_EPPAD_BAD_KEY   = 1 + JposConst.JPOSERREXT;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl110.java b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl110.java
new file mode 100644
index 0000000..0cae6d1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl110.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PINPadControl110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to PIN Pad for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface PINPadControl110 extends PINPadControl19
+{
+  // Methods
+  public void    clearInputProperties()
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl111.java
new file mode 100644
index 0000000..7a62cc8
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PINPadControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to PIN Pad for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface PINPadControl111 extends PINPadControl110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl112.java
new file mode 100644
index 0000000..3dff6c8
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PINPadControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to PIN Pad for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface PINPadControl112 extends PINPadControl111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl113.java
new file mode 100644
index 0000000..2244d1d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PINPadControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to PIN Pad for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface PINPadControl113 extends PINPadControl112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl114.java
new file mode 100644
index 0000000..c70708d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PINPadControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to PIN Pad for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface PINPadControl114 extends PINPadControl113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl13.java b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl13.java
new file mode 100644
index 0000000..435c957
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl13.java
@@ -0,0 +1,96 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PINPadControl13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to PIN Pad for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface PINPadControl13 extends BaseControl
+{
+    // Capabilities
+    public int     getCapDisplay() throws JposException;
+    public int     getCapLanguage() throws JposException;
+    public boolean getCapKeyboard() throws JposException;
+    public boolean getCapMACCalculation() throws JposException;
+    public int     getCapPowerReporting() throws JposException;
+    public boolean getCapTone() throws JposException;
+
+    // Properties
+    public String  getAccountNumber() throws JposException;
+    public void    setAccountNumber(String accountNumber) throws JposException;
+    public String  getAdditionalSecurityInformation() throws JposException;
+    public long    getAmount() throws JposException;
+    public void    setAmount(long amount) throws JposException;
+    public String  getAvailableLanguagesList() throws JposException;
+    public String  getAvailablePromptsList() throws JposException;
+    public int     getDataCount() throws JposException;
+    public boolean getDataEventEnabled() throws JposException;
+    public void    setDataEventEnabled(boolean dataEventEnabled)
+                       throws JposException;
+    public String  getEncryptedPIN() throws JposException;
+    public int     getMaximumPINLength() throws JposException;
+    public void    setMaximumPINLength(int maximumPINLength) throws JposException;
+    public String  getMerchantID() throws JposException;
+    public void    setMerchantID(String merchantID) throws JposException;
+    public int     getMinimumPINLength() throws JposException;
+    public void    setMinimumPINLength(int minimumPINLength) throws JposException;
+    public boolean getPINEntryEnabled() throws JposException;
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+    public int     getPrompt() throws JposException;
+    public void    setPrompt(int propmpt) throws JposException;
+    public String  getPromptLanguage() throws JposException;
+    public void    setPromptLanguage(String promptLanguage) throws JposException;
+    public String  getTerminalID() throws JposException;
+    public void    setTerminalID(String terminalID) throws JposException;
+    public byte[]  getTrack1Data() throws JposException;
+    public void    setTrack1Data(byte[] track1Data) throws JposException;
+    public byte[]  getTrack2Data() throws JposException;
+    public void    setTrack2Data(byte[] track2Data) throws JposException;
+    public byte[]  getTrack3Data() throws JposException;
+    public void    setTrack3Data(byte[] track3Data) throws JposException;
+    public int     getTransactionType() throws JposException;
+    public void    setTransactionType(int transactionType) throws JposException;
+
+    // Methods
+    public void    beginEFTTransaction(String PINPadSystem, int transactionHost)
+                       throws JposException;
+    public void    clearInput() throws JposException;
+    public void    computeMAC(String inMsg, String[] outMsg)
+                       throws JposException;
+    public void    enablePINEntry() throws JposException;
+    public void    endEFTTransaction(int completionCode) throws JposException;
+    public void    updateKey(int keyNum, String key) throws JposException;
+    public void    verifyMAC(String message) throws JposException;
+
+    // Event listener methods
+    public void    addDataListener(DataListener l);
+    public void    removeDataListener(DataListener l);
+    public void    addDirectIOListener(DirectIOListener l);
+    public void    removeDirectIOListener(DirectIOListener l);
+    public void    addErrorListener(ErrorListener l);
+    public void    removeErrorListener(ErrorListener l);
+    public void    addStatusUpdateListener(StatusUpdateListener l);
+    public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl14.java b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl14.java
new file mode 100644
index 0000000..e27dc0c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PINPadControl14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to PIN Pad for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface PINPadControl14 extends PINPadControl13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl15.java b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl15.java
new file mode 100644
index 0000000..ece289a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl15.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PINPadControl15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to PIN Pad for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 00-04-17 JavaPOS Release 1.5                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface PINPadControl15 extends PINPadControl14
+{
+    // Properties
+    public byte[]  getTrack4Data() throws JposException;
+    public void    setTrack4Data(byte[] track4Data) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl16.java b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl16.java
new file mode 100644
index 0000000..50f8ae8
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl16.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PINPadControl16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to PIN Pad for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-04-18 JavaPOS Release 1.6                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface PINPadControl16 extends PINPadControl15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl17.java b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl17.java
new file mode 100644
index 0000000..d398883
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl17.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PINPadControl17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to PIN Pad for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface PINPadControl17 extends PINPadControl16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl18.java b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl18.java
new file mode 100644
index 0000000..e8415d7
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl18.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PINPadControl18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to PIN Pad for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface PINPadControl18 extends PINPadControl17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl19.java b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl19.java
new file mode 100644
index 0000000..cf7a4d4
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PINPadControl19.java
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PINPadControl19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to PIN Pad for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface PINPadControl19 extends PINPadControl18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboard.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboard.java
new file mode 100644
index 0000000..527a43f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboard.java
@@ -0,0 +1,1144 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboard.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class POSKeyboard
+  extends BaseJposControl
+  implements POSKeyboardControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected POSKeyboardService12 service12;
+  protected POSKeyboardService13 service13;
+  protected POSKeyboardService14 service14;
+  protected POSKeyboardService15 service15;
+  protected POSKeyboardService16 service16;
+  protected POSKeyboardService17 service17;
+  protected POSKeyboardService18 service18;
+  protected POSKeyboardService19 service19;
+  protected POSKeyboardService110 service110;
+  protected POSKeyboardService111 service111;
+  protected POSKeyboardService112 service112;
+  protected POSKeyboardService113 service113;
+  protected POSKeyboardService114 service114;
+  protected Vector dataListeners;
+  protected Vector directIOListeners;
+  protected Vector errorListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public POSKeyboard()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS POSKeyboard Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service12 = null;
+    //service13 = null;
+    //service14 = null;
+    //service15 = null;
+    //service16 = null;
+    //service17 = null;
+    //service18 = null;
+    //service19 = null;
+    //service110 = null;
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    dataListeners = new Vector();
+    directIOListeners = new Vector();
+    errorListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapKeyUp()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapKeyUp();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public boolean getAutoDisable()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getAutoDisable();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAutoDisable(boolean autoDisable)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setAutoDisable(autoDisable);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDataCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getDataCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getDataEventEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getDataEventEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDataEventEnabled(boolean dataEventEnabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setDataEventEnabled(dataEventEnabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getEventTypes()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getEventTypes();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setEventTypes(int eventTypes)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setEventTypes(eventTypes);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPOSKeyData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getPOSKeyData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPOSKeyEventType()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getPOSKeyEventType();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void clearInput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.clearInput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new POSKeyboardCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service12 = null;
+      service13 = null;
+      service14 = null;
+      service15 = null;
+      service16 = null;
+      service17 = null;
+      service18 = null;
+      service19 = null;
+      service110 = null;
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion12)
+      {
+        try
+        {
+          service12 = (POSKeyboardService12)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSKeyboardService12 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion13)
+      {
+        try
+        {
+          service13 = (POSKeyboardService13)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSKeyboardService13 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion14)
+      {
+        try
+        {
+          service14 = (POSKeyboardService14)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSKeyboardService14 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion15)
+      {
+        try
+        {
+          service15 = (POSKeyboardService15)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSKeyboardService15 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion16)
+      {
+        try
+        {
+          service16 = (POSKeyboardService16)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSKeyboardService16 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion17)
+      {
+        try
+        {
+          service17 = (POSKeyboardService17)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSKeyboardService17 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion18)
+      {
+        try
+        {
+          service18 = (POSKeyboardService18)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSKeyboardService18 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion19)
+      {
+        try
+        {
+          service19 = (POSKeyboardService19)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSKeyboardService19 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion110)
+      {
+        try
+        {
+          service110 = (POSKeyboardService110)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSKeyboardService110 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (POSKeyboardService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSKeyboardService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (POSKeyboardService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSKeyboardService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (POSKeyboardService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSKeyboardService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (POSKeyboardService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSKeyboardService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.addElement(l);
+    }
+  }
+
+  public void removeDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.removeElement(l);
+    }
+  }
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.addElement(l);
+    }
+  }
+
+  public void removeErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class POSKeyboardCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)POSKeyboard.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+      synchronized(POSKeyboard.this.dataListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < dataListeners.size(); x++)
+        {
+          ((DataListener)dataListeners.elementAt(x)).dataOccurred(e);
+        }
+      }
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(POSKeyboard.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+      synchronized(POSKeyboard.this.errorListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < errorListeners.size(); x++)
+        {
+          ((ErrorListener)errorListeners.elementAt(x)).errorOccurred(e);
+        }
+      }
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(POSKeyboard.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboard.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboard.manifest.stub
new file mode 100644
index 0000000..b580a49
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboard.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/POSKeyboard.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardBeanInfo.java
new file mode 100644
index 0000000..dbb351b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardBeanInfo.java
@@ -0,0 +1,97 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// POSKeyboardBeanInfo.java - Bean information for the JavaPOS POSKeyboard
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class POSKeyboardBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.POSKeyboard.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.POSKeyboard.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapKeyUp"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapUpdateFirmware"),
+
+        // Properties
+        makeProperty("AutoDisable"),
+        makeProperty("DataCount"),
+        makeProperty("DataEventEnabled"),
+        makeProperty("EventTypes"),
+        makeProperty("POSKeyData"),
+        makeProperty("POSKeyEventType"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState")
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.POSKeyboard.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("Data"),
+        makeEvent("DirectIO"),
+        makeEvent("Error"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardConst.java
new file mode 100644
index 0000000..3623cc8
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardConst.java
@@ -0,0 +1,45 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardConst
+//
+//   POS Keyboard constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface POSKeyboardConst
+{
+    //###################################################################
+    //#### POS Keyboard Constants
+    //###################################################################
+
+    /////////////////////////////////////////////////////////////////////
+    // "EventTypes" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int KBD_ET_DOWN          =   1;
+    public static final int KBD_ET_DOWN_UP       =   2;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "POSKeyEventType" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int KBD_KET_KEYDOWN      =   1;
+    public static final int KBD_KET_KEYUP        =   2;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl110.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl110.java
new file mode 100644
index 0000000..6170710
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl110.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardControl110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Keyboard for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSKeyboardControl110 extends POSKeyboardControl19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl111.java
new file mode 100644
index 0000000..d5bf42a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Keyboard for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSKeyboardControl111 extends POSKeyboardControl110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl112.java
new file mode 100644
index 0000000..9a9f5bd
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Keyboard for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSKeyboardControl112 extends POSKeyboardControl111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl113.java
new file mode 100644
index 0000000..ea7ed73
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Keyboard for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSKeyboardControl113 extends POSKeyboardControl112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl114.java
new file mode 100644
index 0000000..126ea47
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to POS Keyboard for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSKeyboardControl114 extends POSKeyboardControl113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl12.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl12.java
new file mode 100644
index 0000000..62ced0a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl12.java
@@ -0,0 +1,55 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardControl12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to POS Keyboard for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSKeyboardControl12 extends BaseControl
+{
+    // Capabilities
+    public boolean getCapKeyUp() throws JposException;
+
+    // Properties
+    public boolean getAutoDisable() throws JposException;
+    public void    setAutoDisable(boolean autoDisable) throws JposException;
+    public int     getDataCount() throws JposException;
+    public boolean getDataEventEnabled() throws JposException;
+    public void    setDataEventEnabled(boolean dataEventEnabled)
+                       throws JposException;
+    public int     getEventTypes() throws JposException;
+    public void    setEventTypes(int eventTypes) throws JposException;
+    public int     getPOSKeyData() throws JposException;
+    public int     getPOSKeyEventType() throws JposException;
+
+    // Methods
+    public void    clearInput() throws JposException;
+
+    // Event listener methods
+    public void    addDataListener(DataListener l);
+    public void    removeDataListener(DataListener l);
+    public void    addDirectIOListener(DirectIOListener l);
+    public void    removeDirectIOListener(DirectIOListener l);
+    public void    addErrorListener(ErrorListener l);
+    public void    removeErrorListener(ErrorListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl13.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl13.java
new file mode 100644
index 0000000..1be5932
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl13.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardControl13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Keyboard for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSKeyboardControl13 extends POSKeyboardControl12
+{
+    // Capabilities
+  public int     getCapPowerReporting() throws JposException;
+
+    // Properties
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+
+    // Event listener methods
+    public void    addStatusUpdateListener(StatusUpdateListener l);
+    public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl14.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl14.java
new file mode 100644
index 0000000..d83272c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardControl14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Keyboard for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSKeyboardControl14 extends POSKeyboardControl13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl15.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl15.java
new file mode 100644
index 0000000..2b661b3
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl15.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardControl15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Keyboard for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 00-04-17 JavaPOS Release 1.5                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSKeyboardControl15 extends POSKeyboardControl14
+{
+  // Nothing new added for release 1.5
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl16.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl16.java
new file mode 100644
index 0000000..84a552a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl16.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardControl16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Keyboard for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-04-18 JavaPOS Release 1.6                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSKeyboardControl16 extends POSKeyboardControl15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl17.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl17.java
new file mode 100644
index 0000000..749856f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl17.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardControl17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Keyboard for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSKeyboardControl17 extends POSKeyboardControl16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl18.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl18.java
new file mode 100644
index 0000000..fc91ae0
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl18.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardControl18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Keyboard for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSKeyboardControl18 extends POSKeyboardControl17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl19.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl19.java
new file mode 100644
index 0000000..f98335c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSKeyboardControl19.java
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardControl19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Keyboard for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSKeyboardControl19 extends POSKeyboardControl18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPower.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPower.java
new file mode 100644
index 0000000..c428fa8
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPower.java
@@ -0,0 +1,1518 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPower.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class POSPower
+  extends BaseJposControl
+  implements POSPowerControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected POSPowerService15 service15;
+  protected POSPowerService16 service16;
+  protected POSPowerService17 service17;
+  protected POSPowerService18 service18;
+  protected POSPowerService19 service19;
+  protected POSPowerService110 service110;
+  protected POSPowerService111 service111;
+  protected POSPowerService112 service112;
+  protected POSPowerService113 service113;
+  protected POSPowerService114 service114;
+  protected Vector directIOListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public POSPower()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS POSPower Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service15 = null;
+    //service16 = null;
+    //service17 = null;
+    //service18 = null;
+    //service19 = null;
+    //service110 = null;
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    directIOListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapFanAlarm()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapFanAlarm();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapHeatAlarm()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapHeatAlarm();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapQuickCharge()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapQuickCharge();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapShutdownPOS()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapShutdownPOS();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapUPSChargeState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapUPSChargeState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapBatteryCapacityRemaining()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapBatteryCapacityRemaining();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRestartPOS()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapRestartPOS();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStandbyPOS()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapStandbyPOS();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSuspendPOS()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapSuspendPOS();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapVariableBatteryCriticallyLowThreshold()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapVariableBatteryCriticallyLowThreshold();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapVariableBatteryLowThreshold()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapVariableBatteryLowThreshold();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public int getEnforcedShutdownDelayTime()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getEnforcedShutdownDelayTime();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setEnforcedShutdownDelayTime(int delay)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.setEnforcedShutdownDelayTime(delay);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerFailDelayTime()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getPowerFailDelayTime();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getQuickChargeMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getQuickChargeMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getQuickChargeTime()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getQuickChargeTime();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getUPSChargeState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getUPSChargeState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getBatteryCapacityRemaining()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getBatteryCapacityRemaining();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getBatteryCriticallyLowThreshold()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getBatteryCriticallyLowThreshold();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setBatteryCriticallyLowThreshold(int threshold)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.setBatteryCriticallyLowThreshold(threshold);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getBatteryLowThreshold()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getBatteryLowThreshold();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setBatteryLowThreshold(int threshold)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.setBatteryLowThreshold(threshold);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerSource()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getPowerSource();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void shutdownPOS()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.shutdownPOS();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void restartPOS()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.restartPOS();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void standbyPOS(int reason)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.standbyPOS(reason);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void suspendPOS(int reason)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.suspendPOS(reason);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new POSPowerCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service15 = null;
+      service16 = null;
+      service17 = null;
+      service18 = null;
+      service19 = null;
+      service110 = null;
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion15)
+      {
+        try
+        {
+          service15 = (POSPowerService15)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSPowerService15 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion16)
+      {
+        try
+        {
+          service16 = (POSPowerService16)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSPowerService16 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion17)
+      {
+        try
+        {
+          service17 = (POSPowerService17)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSPowerService17 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion18)
+      {
+        try
+        {
+          service18 = (POSPowerService18)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSPowerService18 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion19)
+      {
+        try
+        {
+          service19 = (POSPowerService19)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSPowerService19 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion110)
+      {
+        try
+        {
+          service110 = (POSPowerService110)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSPowerService110 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (POSPowerService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSPowerService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (POSPowerService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSPowerService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (POSPowerService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSPowerService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (POSPowerService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSPowerService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class POSPowerCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)POSPower.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(POSPower.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(POSPower.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPower.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/POSPower.manifest.stub
new file mode 100644
index 0000000..1b8ac0f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPower.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/POSPower.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerBeanInfo.java
new file mode 100644
index 0000000..466dba1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerBeanInfo.java
@@ -0,0 +1,108 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// POSPowerBeanInfo.java - Bean information for the JavaPOS POSPower
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class POSPowerBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.POSPower.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.POSPower.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapFanAlarm"),
+        makeProperty("CapHeatAlarm"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapQuickCharge"),
+        makeProperty("CapShutdownPOS"),
+        makeProperty("CapUPSChargeState"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapBatteryCapacityRemaining"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapRestartPOS"),
+        makeProperty("CapStandbyPOS"),
+        makeProperty("CapSuspendPOS"),
+        makeProperty("CapUpdateFirmware"),
+        makeProperty("CapVariableBatteryCriticallyLowThreshold"),
+        makeProperty("CapVariableBatteryLowThreshold"),
+
+        // Properties
+        makeProperty("EnforcedShutdownDelayTime"),
+        makeProperty("PowerFailDelayTime"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState"),
+        makeProperty("QuickChargeMode"),
+        makeProperty("QuickChargeTime"),
+        makeProperty("UPSChargeState"),
+        makeProperty("BatteryCapacityRemaining"),
+        makeProperty("BatteryCriticallyLowThreshold"),
+        makeProperty("BatteryLowThreshold"),
+        makeProperty("PowerSource")
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.POSPower.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("DirectIO"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerConst.java
new file mode 100644
index 0000000..d20f14e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerConst.java
@@ -0,0 +1,97 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPowerConst
+//
+//   POSPower constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2000-Apr-18 JavaPOS Release 1.5                                 BS
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//   Added the following constants:
+//     PWR_SOURCE_NA
+//     PWR_SOURCE_AC
+//     PWR_SOURCE_BATTERY
+//     PWR_SOURCE_BACKUP
+//     PWR_REASON_REQUEST
+//     PWR_REASON_ALLOW
+//     PWR_REASON_DENY
+//     PWR_SUE_BAT_LOW
+//     PWR_SUE_BAT_CRITICAL
+//     PWR_SUE_BAT_CAPACITY_REMAINING
+//     PWR_SUE_RESTART
+//     PWR_SUE_STANDBY
+//     PWR_SUE_USER_STANDBY
+//     PWR_SUE_SUSPEND
+//     PWR_SUE_USER_SUSPEND
+//     PWR_SUE_PWR_SOURCE
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface POSPowerConst
+{
+    /////////////////////////////////////////////////////////////////////
+    // "CapUPSChargeState" Capability and "UPSChargeState" Property
+    //    Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PWR_UPS_FULL      = 0x00000001;
+    public static final int PWR_UPS_WARNING   = 0x00000002;
+    public static final int PWR_UPS_LOW       = 0x00000004;
+    public static final int PWR_UPS_CRITICAL  = 0x00000008;
+
+    /////////////////////////////////////////////////////////////////////
+    // "PowerSource" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PWR_SOURCE_NA       = 1;
+    public static final int PWR_SOURCE_AC       = 2;
+    public static final int PWR_SOURCE_BATTERY  = 3;
+    public static final int PWR_SOURCE_BACKUP   = 4;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "restartPOS", "standbyPOS", "suspendPOS" Methods:
+    //   "reason" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PWR_REASON_REQUEST = 1;
+    public static final int PWR_REASON_ALLOW   = 2;
+    public static final int PWR_REASON_DENY    = 3;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // Status Update Event: "Status" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PWR_SUE_UPS_FULL               = 11;
+    public static final int PWR_SUE_UPS_WARNING            = 12;
+    public static final int PWR_SUE_UPS_LOW                = 13;
+    public static final int PWR_SUE_UPS_CRITICAL           = 14;
+    public static final int PWR_SUE_FAN_STOPPED            = 15;
+    public static final int PWR_SUE_FAN_RUNNING            = 16;
+    public static final int PWR_SUE_TEMPERATURE_HIGH       = 17;
+    public static final int PWR_SUE_TEMPERATURE_OK         = 18;
+    public static final int PWR_SUE_SHUTDOWN               = 19;
+    public static final int PWR_SUE_BAT_LOW                = 20;
+    public static final int PWR_SUE_BAT_CRITICAL           = 21;
+    public static final int PWR_SUE_BAT_CAPACITY_REMAINING = 22;
+    public static final int PWR_SUE_RESTART                = 23;
+    public static final int PWR_SUE_STANDBY                = 24;
+    public static final int PWR_SUE_USER_STANDBY           = 25;
+    public static final int PWR_SUE_SUSPEND                = 26;
+    public static final int PWR_SUE_USER_SUSPEND           = 27;
+    public static final int PWR_SUE_PWR_SOURCE             = 28;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl110.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl110.java
new file mode 100644
index 0000000..51e085f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl110.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPowerControl110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POSPower for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSPowerControl110 extends POSPowerControl19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl111.java
new file mode 100644
index 0000000..87c39da
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPowerControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POSPower for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSPowerControl111 extends POSPowerControl110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl112.java
new file mode 100644
index 0000000..7b25649
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPowerControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POSPower for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSPowerControl112 extends POSPowerControl111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl113.java
new file mode 100644
index 0000000..33251ed
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPowerControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POSPower for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSPowerControl113 extends POSPowerControl112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl114.java
new file mode 100644
index 0000000..d86c2ee
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPowerControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to POSPower for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSPowerControl114 extends POSPowerControl113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl15.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl15.java
new file mode 100644
index 0000000..ff70c54
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl15.java
@@ -0,0 +1,58 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPowerControl15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POSPower for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2000-Apr-18 JavaPOS Release 1.5                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSPowerControl15 extends BaseControl
+{
+    // Capabilities
+    public boolean getCapFanAlarm() throws JposException;
+    public boolean getCapHeatAlarm() throws JposException;
+    public int     getCapPowerReporting() throws JposException;
+    public boolean getCapQuickCharge() throws JposException;
+    public boolean getCapShutdownPOS() throws JposException;
+    public int     getCapUPSChargeState() throws JposException;
+
+    // Properties
+    public int     getEnforcedShutdownDelayTime() throws JposException;
+    public void    setEnforcedShutdownDelayTime(int delay)
+                       throws JposException;
+    public int     getPowerFailDelayTime() throws JposException;
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+    public boolean getQuickChargeMode() throws JposException;
+    public int     getQuickChargeTime() throws JposException;
+    public int     getUPSChargeState() throws JposException;
+
+    // Methods
+    public void    shutdownPOS() throws JposException;
+
+    // Event listener methods
+    public void    addDirectIOListener(DirectIOListener l);
+    public void    removeDirectIOListener(DirectIOListener l);
+    public void    addStatusUpdateListener(StatusUpdateListener l);
+    public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl16.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl16.java
new file mode 100644
index 0000000..ca76031
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl16.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPowerControl16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POSPower for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2000-Apr-18 JavaPOS Release 1.6                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSPowerControl16 extends POSPowerControl15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl17.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl17.java
new file mode 100644
index 0000000..dc7f161
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl17.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPowerControl17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POSPower for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSPowerControl17 extends POSPowerControl16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl18.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl18.java
new file mode 100644
index 0000000..576acfc
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl18.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPowerControl18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POSPower for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSPowerControl18 extends POSPowerControl17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl19.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl19.java
new file mode 100644
index 0000000..b42dc4d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPowerControl19.java
@@ -0,0 +1,59 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPowerControl19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POSPower for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSPowerControl19 extends POSPowerControl18
+{
+  // Capabilities
+  public boolean getCapBatteryCapacityRemaining() throws JposException;
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapRestartPOS() throws JposException;
+  public boolean getCapStandbyPOS() throws JposException;
+  public boolean getCapSuspendPOS() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+  public boolean getCapVariableBatteryCriticallyLowThreshold() throws JposException;
+  public boolean getCapVariableBatteryLowThreshold() throws JposException;
+
+  // Properties
+  public int     getBatteryCapacityRemaining() throws JposException;
+  public int     getBatteryCriticallyLowThreshold() throws JposException;
+  public void    setBatteryCriticallyLowThreshold(int threshold) throws JposException;
+  public int     getBatteryLowThreshold() throws JposException;
+  public void    setBatteryLowThreshold(int threshold) throws JposException;
+  public int     getPowerSource() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    restartPOS()
+                     throws JposException;
+  public void    standbyPOS(int reason)
+                     throws JposException;
+  public void    suspendPOS(int reason)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinter.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinter.java
new file mode 100644
index 0000000..4fbbc2b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinter.java
@@ -0,0 +1,5580 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinter.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class POSPrinter
+  extends BaseJposControl
+  implements POSPrinterControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected POSPrinterService12 service12;
+  protected POSPrinterService13 service13;
+  protected POSPrinterService14 service14;
+  protected POSPrinterService15 service15;
+  protected POSPrinterService16 service16;
+  protected POSPrinterService17 service17;
+  protected POSPrinterService18 service18;
+  protected POSPrinterService19 service19;
+  protected POSPrinterService110 service110;
+  protected POSPrinterService111 service111;
+  protected POSPrinterService112 service112;
+  protected POSPrinterService113 service113;
+  protected POSPrinterService114 service114;
+  protected Vector directIOListeners;
+  protected Vector errorListeners;
+  protected Vector outputCompleteListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public POSPrinter()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS POSPrinter Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service12 = null;
+    //service13 = null;
+    //service14 = null;
+    //service15 = null;
+    //service16 = null;
+    //service17 = null;
+    //service18 = null;
+    //service19 = null;
+    //service110 = null;
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    directIOListeners = new Vector();
+    errorListeners = new Vector();
+    outputCompleteListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public int getCapCharacterSet()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapCharacterSet();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapConcurrentJrnRec()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapConcurrentJrnRec();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapConcurrentJrnSlp()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapConcurrentJrnSlp();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapConcurrentRecSlp()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapConcurrentRecSlp();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCoverSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapCoverSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapJrn2Color()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapJrn2Color();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapJrnBold()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapJrnBold();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapJrnDhigh()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapJrnDhigh();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapJrnDwide()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapJrnDwide();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapJrnDwideDhigh()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapJrnDwideDhigh();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapJrnEmptySensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapJrnEmptySensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapJrnItalic()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapJrnItalic();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapJrnNearEndSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapJrnNearEndSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapJrnPresent()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapJrnPresent();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapJrnUnderline()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapJrnUnderline();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRec2Color()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapRec2Color();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRecBarCode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapRecBarCode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRecBitmap()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapRecBitmap();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRecBold()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapRecBold();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRecDhigh()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapRecDhigh();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRecDwide()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapRecDwide();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRecDwideDhigh()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapRecDwideDhigh();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRecEmptySensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapRecEmptySensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRecItalic()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapRecItalic();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRecLeft90()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapRecLeft90();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRecNearEndSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapRecNearEndSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRecPapercut()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapRecPapercut();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRecPresent()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapRecPresent();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRecRight90()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapRecRight90();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRecRotate180()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapRecRotate180();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRecStamp()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapRecStamp();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRecUnderline()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapRecUnderline();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSlp2Color()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapSlp2Color();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSlpBarCode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapSlpBarCode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSlpBitmap()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapSlpBitmap();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSlpBold()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapSlpBold();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSlpDhigh()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapSlpDhigh();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSlpDwide()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapSlpDwide();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSlpDwideDhigh()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapSlpDwideDhigh();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSlpEmptySensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapSlpEmptySensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSlpFullslip()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapSlpFullslip();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSlpItalic()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapSlpItalic();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSlpLeft90()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapSlpLeft90();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSlpNearEndSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapSlpNearEndSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSlpPresent()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapSlpPresent();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSlpRight90()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapSlpRight90();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSlpRotate180()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapSlpRotate180();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSlpUnderline()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapSlpUnderline();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapTransaction()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapTransaction();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapJrnCartridgeSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapJrnCartridgeSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapJrnColor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapJrnColor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapRecCartridgeSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapRecCartridgeSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapRecColor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapRecColor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapRecMarkFeed()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapRecMarkFeed();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSlpBothSidesPrint()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapSlpBothSidesPrint();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapSlpCartridgeSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapSlpCartridgeSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapSlpColor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapSlpColor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapMapCharacterSet()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.7.0
+    if(serviceVersion < deviceVersion17)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.7.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getCapMapCharacterSet();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapConcurrentPageMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapConcurrentPageMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRecPageMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapRecPageMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSlpPageMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapSlpPageMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapRecRuledLine()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.13.0
+    if(serviceVersion < deviceVersion113)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.13.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service113.getCapRecRuledLine();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapSlpRuledLine()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.13.0
+    if(serviceVersion < deviceVersion113)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.13.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service113.getCapSlpRuledLine();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public boolean getAsyncMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getAsyncMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAsyncMode(boolean asyncMode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setAsyncMode(asyncMode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCharacterSet()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCharacterSet();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setCharacterSet(int characterSet)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setCharacterSet(characterSet);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getCharacterSetList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCharacterSetList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCoverOpen()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCoverOpen();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getErrorLevel()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getErrorLevel();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getErrorStation()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getErrorStation();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getErrorString()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getErrorString();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getFlagWhenIdle()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getFlagWhenIdle();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setFlagWhenIdle(boolean flagWhenIdle)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setFlagWhenIdle(flagWhenIdle);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getFontTypefaceList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getFontTypefaceList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getJrnEmpty()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getJrnEmpty();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getJrnLetterQuality()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getJrnLetterQuality();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setJrnLetterQuality(boolean jrnLetterQuality)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setJrnLetterQuality(jrnLetterQuality);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getJrnLineChars()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getJrnLineChars();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setJrnLineChars(int jrnLineChars)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setJrnLineChars(jrnLineChars);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getJrnLineCharsList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getJrnLineCharsList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getJrnLineHeight()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getJrnLineHeight();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setJrnLineHeight(int jrnLineHeight)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setJrnLineHeight(jrnLineHeight);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getJrnLineSpacing()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getJrnLineSpacing();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setJrnLineSpacing(int jrnLineSpacing)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setJrnLineSpacing(jrnLineSpacing);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getJrnLineWidth()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getJrnLineWidth();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getJrnNearEnd()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getJrnNearEnd();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getMapMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getMapMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setMapMode(int mapMode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setMapMode(mapMode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getOutputID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getOutputID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getRecBarCodeRotationList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getRecBarCodeRotationList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getRecEmpty()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getRecEmpty();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getRecLetterQuality()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getRecLetterQuality();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setRecLetterQuality(boolean recLetterQuality)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setRecLetterQuality(recLetterQuality);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getRecLineChars()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getRecLineChars();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setRecLineChars(int recLineChars)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setRecLineChars(recLineChars);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getRecLineCharsList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getRecLineCharsList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getRecLineHeight()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getRecLineHeight();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setRecLineHeight(int recLineHeight)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setRecLineHeight(recLineHeight);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getRecLineSpacing()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getRecLineSpacing();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setRecLineSpacing(int recLineSpacing)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setRecLineSpacing(recLineSpacing);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getRecLinesToPaperCut()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getRecLinesToPaperCut();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getRecLineWidth()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getRecLineWidth();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getRecNearEnd()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getRecNearEnd();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getRecSidewaysMaxChars()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getRecSidewaysMaxChars();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getRecSidewaysMaxLines()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getRecSidewaysMaxLines();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getRotateSpecial()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getRotateSpecial();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setRotateSpecial(int rotateSpecial)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setRotateSpecial(rotateSpecial);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getSlpBarCodeRotationList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getSlpBarCodeRotationList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getSlpEmpty()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getSlpEmpty();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getSlpLetterQuality()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getSlpLetterQuality();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setSlpLetterQuality(boolean recLetterQuality)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setSlpLetterQuality(recLetterQuality);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getSlpLineChars()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getSlpLineChars();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setSlpLineChars(int recLineChars)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setSlpLineChars(recLineChars);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getSlpLineCharsList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getSlpLineCharsList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getSlpLineHeight()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getSlpLineHeight();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setSlpLineHeight(int recLineHeight)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setSlpLineHeight(recLineHeight);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getSlpLinesNearEndToEnd()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getSlpLinesNearEndToEnd();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getSlpLineSpacing()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getSlpLineSpacing();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setSlpLineSpacing(int recLineSpacing)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setSlpLineSpacing(recLineSpacing);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getSlpLineWidth()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getSlpLineWidth();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getSlpMaxLines()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getSlpMaxLines();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getSlpNearEnd()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getSlpNearEnd();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getSlpSidewaysMaxChars()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getSlpSidewaysMaxChars();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getSlpSidewaysMaxLines()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getSlpSidewaysMaxLines();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCartridgeNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCartridgeNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setCartridgeNotify(int notify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.setCartridgeNotify(notify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getJrnCartridgeState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getJrnCartridgeState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getJrnCurrentCartridge()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getJrnCurrentCartridge();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setJrnCurrentCartridge(int cartridge)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.setJrnCurrentCartridge(cartridge);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getRecCartridgeState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getRecCartridgeState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getRecCurrentCartridge()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getRecCurrentCartridge();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setRecCurrentCartridge(int cartridge)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.setRecCurrentCartridge(cartridge);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getSlpCartridgeState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getSlpCartridgeState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getSlpCurrentCartridge()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getSlpCurrentCartridge();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setSlpCurrentCartridge(int cartridge)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.setSlpCurrentCartridge(cartridge);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getSlpPrintSide()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getSlpPrintSide();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getMapCharacterSet()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.7.0
+    if(serviceVersion < deviceVersion17)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.7.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getMapCharacterSet();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setMapCharacterSet(boolean mapCharacterSet)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.7.0
+    if(serviceVersion < deviceVersion17)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.7.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.setMapCharacterSet(mapCharacterSet);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getRecBitmapRotationList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.7.0
+    if(serviceVersion < deviceVersion17)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.7.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getRecBitmapRotationList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getSlpBitmapRotationList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.7.0
+    if(serviceVersion < deviceVersion17)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.7.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getSlpBitmapRotationList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getPageModeArea()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getPageModeArea();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPageModeDescriptor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getPageModeDescriptor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPageModeHorizontalPosition()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getPageModeHorizontalPosition();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPageModeHorizontalPosition(int position)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.setPageModeHorizontalPosition(position);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getPageModePrintArea()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getPageModePrintArea();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPageModePrintArea(String area)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.setPageModePrintArea(area);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPageModePrintDirection()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getPageModePrintDirection();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPageModePrintDirection(int direction)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.setPageModePrintDirection(direction);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPageModeStation()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getPageModeStation();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPageModeStation(int station)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.setPageModeStation(station);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPageModeVerticalPosition()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getPageModeVerticalPosition();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPageModeVerticalPosition(int position)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.setPageModeVerticalPosition(position);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void beginInsertion(int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.beginInsertion(timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void beginRemoval(int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.beginRemoval(timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearOutput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.clearOutput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void cutPaper(int percentage)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.cutPaper(percentage);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void endInsertion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.endInsertion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void endRemoval()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.endRemoval();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printBarCode(int station, String data, int symbology, int height, int width, int alignment, int textPosition)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.printBarCode(station, data, symbology, height, width, alignment, textPosition);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printBitmap(int station, String fileName, int width, int alignment)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.printBitmap(station, fileName, width, alignment);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printImmediate(int station, String data)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.printImmediate(station, data);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printNormal(int station, String data)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.printNormal(station, data);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printTwoNormal(int stations, String data1, String data2)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.printTwoNormal(stations, data1, data2);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void rotatePrint(int station, int rotation)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.rotatePrint(station, rotation);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setBitmap(int bitmapNumber, int station, String fileName, int width, int alignment)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setBitmap(bitmapNumber, station, fileName, width, alignment);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setLogo(int location, String data)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setLogo(location, data);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void transactionPrint(int station, int control)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.transactionPrint(station, control);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void validateData(int station, String data)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.validateData(station, data);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void changePrintSide(int side)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.changePrintSide(side);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void markFeed(int type)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.5.0
+    if(serviceVersion < deviceVersion15)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.5.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.markFeed(type);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearPrintArea()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.clearPrintArea();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void pageModePrint(int control)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.pageModePrint(control);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printMemoryBitmap(int station, byte[] data, int type, int width, int alignment)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.10.0
+    if(serviceVersion < deviceVersion110)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.10.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.printMemoryBitmap(station, data, type, width, alignment);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void drawRuledLine(int station, String positionList, int lineDirection, int lineWidth, int lineStyle, int lineColor)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.13.0
+    if(serviceVersion < deviceVersion113)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.13.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service113.drawRuledLine(station, positionList, lineDirection, lineWidth, lineStyle, lineColor);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new POSPrinterCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service12 = null;
+      service13 = null;
+      service14 = null;
+      service15 = null;
+      service16 = null;
+      service17 = null;
+      service18 = null;
+      service19 = null;
+      service110 = null;
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion12)
+      {
+        try
+        {
+          service12 = (POSPrinterService12)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSPrinterService12 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion13)
+      {
+        try
+        {
+          service13 = (POSPrinterService13)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSPrinterService13 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion14)
+      {
+        try
+        {
+          service14 = (POSPrinterService14)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSPrinterService14 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion15)
+      {
+        try
+        {
+          service15 = (POSPrinterService15)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSPrinterService15 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion16)
+      {
+        try
+        {
+          service16 = (POSPrinterService16)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSPrinterService16 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion17)
+      {
+        try
+        {
+          service17 = (POSPrinterService17)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSPrinterService17 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion18)
+      {
+        try
+        {
+          service18 = (POSPrinterService18)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSPrinterService18 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion19)
+      {
+        try
+        {
+          service19 = (POSPrinterService19)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSPrinterService19 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion110)
+      {
+        try
+        {
+          service110 = (POSPrinterService110)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSPrinterService110 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (POSPrinterService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSPrinterService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (POSPrinterService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSPrinterService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (POSPrinterService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSPrinterService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (POSPrinterService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement POSPrinterService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.addElement(l);
+    }
+  }
+
+  public void removeErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.removeElement(l);
+    }
+  }
+
+  public void addOutputCompleteListener(OutputCompleteListener l)
+  {
+    synchronized(outputCompleteListeners)
+    {
+      outputCompleteListeners.addElement(l);
+    }
+  }
+
+  public void removeOutputCompleteListener(OutputCompleteListener l)
+  {
+    synchronized(outputCompleteListeners)
+    {
+      outputCompleteListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class POSPrinterCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)POSPrinter.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(POSPrinter.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+      synchronized(POSPrinter.this.errorListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < errorListeners.size(); x++)
+        {
+          ((ErrorListener)errorListeners.elementAt(x)).errorOccurred(e);
+        }
+      }
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+      synchronized(POSPrinter.this.outputCompleteListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < outputCompleteListeners.size(); x++)
+        {
+          ((OutputCompleteListener)outputCompleteListeners.elementAt(x)).outputCompleteOccurred(e);
+        }
+      }
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(POSPrinter.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinter.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinter.manifest.stub
new file mode 100644
index 0000000..16f78dd
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinter.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/POSPrinter.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterBeanInfo.java
new file mode 100644
index 0000000..36429f0
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterBeanInfo.java
@@ -0,0 +1,217 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// POSPrinterBeanInfo.java - Bean information for the JavaPOS POSPrinter
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class POSPrinterBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.POSPrinter.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.POSPrinter.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapCharacterSet"),
+        makeProperty("CapConcurrentJrnRec"),
+        makeProperty("CapConcurrentJrnSlp"),
+        makeProperty("CapConcurrentRecSlp"),
+        makeProperty("CapCoverSensor"),
+        makeProperty("CapJrn2Color"),
+        makeProperty("CapJrnBold"),
+        makeProperty("CapJrnDhigh"),
+        makeProperty("CapJrnDwide"),
+        makeProperty("CapJrnDwideDhigh"),
+        makeProperty("CapJrnEmptySensor"),
+        makeProperty("CapJrnItalic"),
+        makeProperty("CapJrnNearEndSensor"),
+        makeProperty("CapJrnPresent"),
+        makeProperty("CapJrnUnderline"),
+        makeProperty("CapRec2Color"),
+        makeProperty("CapRecBarCode"),
+        makeProperty("CapRecBitmap"),
+        makeProperty("CapRecBold"),
+        makeProperty("CapRecDhigh"),
+        makeProperty("CapRecDwide"),
+        makeProperty("CapRecDwideDhigh"),
+        makeProperty("CapRecEmptySensor"),
+        makeProperty("CapRecItalic"),
+        makeProperty("CapRecLeft90"),
+        makeProperty("CapRecNearEndSensor"),
+        makeProperty("CapRecPapercut"),
+        makeProperty("CapRecPresent"),
+        makeProperty("CapRecRight90"),
+        makeProperty("CapRecRotate180"),
+        makeProperty("CapRecStamp"),
+        makeProperty("CapRecUnderline"),
+        makeProperty("CapSlp2Color"),
+        makeProperty("CapSlpBarCode"),
+        makeProperty("CapSlpBitmap"),
+        makeProperty("CapSlpBold"),
+        makeProperty("CapSlpDhigh"),
+        makeProperty("CapSlpDwide"),
+        makeProperty("CapSlpDwideDhigh"),
+        makeProperty("CapSlpEmptySensor"),
+        makeProperty("CapSlpFullslip"),
+        makeProperty("CapSlpItalic"),
+        makeProperty("CapSlpLeft90"),
+        makeProperty("CapSlpNearEndSensor"),
+        makeProperty("CapSlpPresent"),
+        makeProperty("CapSlpRight90"),
+        makeProperty("CapSlpRotate180"),
+        makeProperty("CapSlpUnderline"),
+        makeProperty("CapTransaction"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapJrnCartridgeSensor"),
+        makeProperty("CapJrnColor"),
+        makeProperty("CapRecCartridgeSensor"),
+        makeProperty("CapRecColor"),
+        makeProperty("CapRecMarkFeed"),
+        makeProperty("CapSlpBothSidesPrint"),
+        makeProperty("CapSlpCartridgeSensor"),
+        makeProperty("CapSlpColor"),
+        makeProperty("CapMapCharacterSet"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapConcurrentPageMode"),
+        makeProperty("CapRecPageMode"),
+        makeProperty("CapSlpPageMode"),
+        makeProperty("CapUpdateFirmware"),
+        makeProperty("CapRecRuledLine"),
+        makeProperty("CapSlpRuledLine"),
+
+        // Properties
+        makeProperty("AsyncMode"),
+        makeProperty("CharacterSet"),
+        makeProperty("CharacterSetList"),
+        makeProperty("CoverOpen"),
+        makeProperty("ErrorLevel"),
+        makeProperty("ErrorStation"),
+        makeProperty("ErrorString"),
+        makeProperty("FlagWhenIdle"),
+        makeProperty("FontTypefaceList"),
+        makeProperty("JrnEmpty"),
+        makeProperty("JrnLetterQuality"),
+        makeProperty("JrnLineChars"),
+        makeProperty("JrnLineCharsList"),
+        makeProperty("JrnLineHeight"),
+        makeProperty("JrnLineSpacing"),
+        makeProperty("JrnLineWidth"),
+        makeProperty("JrnNearEnd"),
+        makeProperty("MapMode"),
+        makeProperty("OutputID"),
+        makeProperty("RecBarCodeRotationList"),
+        makeProperty("RecEmpty"),
+        makeProperty("RecLetterQuality"),
+        makeProperty("RecLineChars"),
+        makeProperty("RecLineCharsList"),
+        makeProperty("RecLineHeight"),
+        makeProperty("RecLineSpacing"),
+        makeProperty("RecLinesToPaperCut"),
+        makeProperty("RecLineWidth"),
+        makeProperty("RecNearEnd"),
+        makeProperty("RecSidewaysMaxChars"),
+        makeProperty("RecSidewaysMaxLines"),
+        makeProperty("RotateSpecial"),
+        makeProperty("SlpBarCodeRotationList"),
+        makeProperty("SlpEmpty"),
+        makeProperty("SlpLetterQuality"),
+        makeProperty("SlpLineChars"),
+        makeProperty("SlpLineCharsList"),
+        makeProperty("SlpLineHeight"),
+        makeProperty("SlpLinesNearEndToEnd"),
+        makeProperty("SlpLineSpacing"),
+        makeProperty("SlpLineWidth"),
+        makeProperty("SlpMaxLines"),
+        makeProperty("SlpNearEnd"),
+        makeProperty("SlpSidewaysMaxChars"),
+        makeProperty("SlpSidewaysMaxLines"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState"),
+        makeProperty("CartridgeNotify"),
+        makeProperty("JrnCartridgeState"),
+        makeProperty("JrnCurrentCartridge"),
+        makeProperty("RecCartridgeState"),
+        makeProperty("RecCurrentCartridge"),
+        makeProperty("SlpCartridgeState"),
+        makeProperty("SlpCurrentCartridge"),
+        makeProperty("SlpPrintSide"),
+        makeProperty("MapCharacterSet"),
+        makeProperty("RecBitmapRotationList"),
+        makeProperty("SlpBitmapRotationList"),
+        makeProperty("PageModeArea"),
+        makeProperty("PageModeDescriptor"),
+        makeProperty("PageModeHorizontalPosition"),
+        makeProperty("PageModePrintArea"),
+        makeProperty("PageModePrintDirection"),
+        makeProperty("PageModeStation"),
+        makeProperty("PageModeVerticalPosition"),
+
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.POSPrinter.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("DirectIO"),
+        makeEvent("Error"),
+        makeEvent("OutputComplete"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterConst.java
new file mode 100644
index 0000000..26a6db7
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterConst.java
@@ -0,0 +1,462 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterConst
+//
+//   POS Printer constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 1998-Feb-18 JavaPOS Release 1.2                                 BS
+// 1998-Apr-20 JavaPOS Release 1.3                                 BS
+//   Add more PrintTwoNormal constants.
+// 2003-Jun-03 JavaPOS Release 1.8                                 BS
+//   Added the following constants:
+//     PTR_BCS_Code128_Parsed
+//     PTR_BCS_GTIN
+//      PTR_SUE_JRN_COVER_OPEN
+//      PTR_SUE_JRN_COVER_OK
+//      PTR_SUE_REC_COVER_OPEN
+//      PTR_SUE_REC_COVER_OK
+//      PTR_SUE_SLP_COVER_OPEN
+//      PTR_SUE_SLP_COVER_OK
+// 2004-Feb-27 Added cartridge constants with corect spelling.     BS
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//   Added the following constants:
+//     PTR_PM_BITMAP
+//     PTR_PM_BARCODE
+//     PTR_PM_BM_ROTATE
+//     PTR_PM_BC_ROTATE
+//     PTR_PM_OPAQUE
+//     PTR_PD_LEFT_TO_RIGHT
+//     PTR_PD_BOTTOM_TO_TOP
+//     PTR_PD_RIGHT_TO_LEFT
+//     PTR_PD_TOP_TO_BOTTOM
+//     PTR_PM_PAGE_MODE
+//     PTR_PM_PRINT_SAVE
+//     PTR_PM_NORMAL
+//     PTR_PM_CANCEL
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//   Added the following constants:
+//     PTR_BMT_BMP
+//     PTR_BMT_JPEG
+//     PTR_BMT_GIF
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//   Added Bar Code Symbology values:
+//     PTR_BCS_GS1DATABAR
+//     PTR_BCS_GS1DATABAR_E
+//     PTR_BCS_GS1DATABAR_S
+//     PTR_BCS_GS1DATABAR_E_S
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//   Added Bar Code Symbology values:
+//     PTR_BCS_DATAMATRIX
+//     PTR_BCS_QRCODE
+//     PTR_BCS_UQRCODE
+//     PTR_BCS_AZTEC
+//     PTR_BCS_UPDF417
+//   Added "drawRuledLine" "lineDirection" constants:
+//     PTR_RL_HORIZONTAL
+//     PTR_RL_VERTICAL
+//   Added "drawRuledLine" "lineStyle" constants:
+//     PTR_LS_SINGLE_SOLID_LINE
+//     PTR_LS_DOUBLE_SOLID_LINE
+//     PTR_LS_BROKEN_LINE
+//     PTR_LS_CHAIN_LINE
+// 2009-Oct-06 JavaPOS Release 1.13.1                              BS
+//   Re-added dropped, misspelled slip cartridge constant for backwards
+//   compatibility.
+//     PTR_SUE_SLP_CARTDRIGE_OK
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface POSPrinterConst
+{
+    //###################################################################
+    //#### POS Printer Constants
+    //###################################################################
+
+    /////////////////////////////////////////////////////////////////////
+    // Printer Station Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PTR_S_JOURNAL        = 1;
+    public static final int PTR_S_RECEIPT        = 2;
+    public static final int PTR_S_SLIP           = 4;
+
+    public static final int PTR_S_JOURNAL_RECEIPT= PTR_S_JOURNAL | PTR_S_RECEIPT;
+    public static final int PTR_S_JOURNAL_SLIP   = PTR_S_JOURNAL | PTR_S_SLIP   ;
+    public static final int PTR_S_RECEIPT_SLIP   = PTR_S_RECEIPT | PTR_S_SLIP   ;
+
+    public static final int PTR_TWO_RECEIPT_JOURNAL  = 0x8000 + PTR_S_JOURNAL_RECEIPT;
+    public static final int PTR_TWO_SLIP_JOURNAL     = 0x8000 + PTR_S_JOURNAL_SLIP   ;
+    public static final int PTR_TWO_SLIP_RECEIPT     = 0x8000 + PTR_S_RECEIPT_SLIP   ;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "CapCharacterSet" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PTR_CCS_ALPHA        =   1;
+    public static final int PTR_CCS_ASCII        = 998;
+    public static final int PTR_CCS_KANA         =  10;
+    public static final int PTR_CCS_KANJI        =  11;
+    public static final int PTR_CCS_UNICODE      = 997;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "CharacterSet" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PTR_CS_UNICODE       = 997;
+    public static final int PTR_CS_ASCII         = 998;
+    public static final int PTR_CS_ANSI          = 999;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "ErrorLevel" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PTR_EL_NONE          = 1;
+    public static final int PTR_EL_RECOVERABLE   = 2;
+    public static final int PTR_EL_FATAL         = 3;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "MapMode" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PTR_MM_DOTS          = 1;
+    public static final int PTR_MM_TWIPS         = 2;
+    public static final int PTR_MM_ENGLISH       = 3;
+    public static final int PTR_MM_METRIC        = 4;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "CapXxxColor" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PTR_COLOR_PRIMARY      = 0x00000001;
+    public static final int PTR_COLOR_CUSTOM1      = 0x00000002;
+    public static final int PTR_COLOR_CUSTOM2      = 0x00000004;
+    public static final int PTR_COLOR_CUSTOM3      = 0x00000008;
+    public static final int PTR_COLOR_CUSTOM4      = 0x00000010;
+    public static final int PTR_COLOR_CUSTOM5      = 0x00000020;
+    public static final int PTR_COLOR_CUSTOM6      = 0x00000040;
+    public static final int PTR_COLOR_CYAN         = 0x00000100;
+    public static final int PTR_COLOR_MAGENTA      = 0x00000200;
+    public static final int PTR_COLOR_YELLOW       = 0x00000400;
+    public static final int PTR_COLOR_FULL         = 0x80000000;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "CapXxxCartridgeSensor" and  "XxxCartridgeState" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PTR_CART_UNKNOWN         = 0x10000000;
+    public static final int PTR_CART_OK              = 0x00000000;
+    public static final int PTR_CART_REMOVED         = 0x00000001;
+    public static final int PTR_CART_EMPTY           = 0x00000002;
+    public static final int PTR_CART_NEAREND         = 0x00000004;
+    public static final int PTR_CART_CLEANING        = 0x00000008;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "CartridgeNotify"  Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PTR_CN_DISABLED        = 0x00000000;
+    public static final int PTR_CN_ENABLED         = 0x00000001;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "PageModeDescriptor"  Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PTR_PM_BITMAP         = 0x00000001;
+    public static final int PTR_PM_BARCODE        = 0x00000002;
+    public static final int PTR_PM_BM_ROTATE      = 0x00000004;
+    public static final int PTR_PM_BC_ROTATE      = 0x00000008;
+    public static final int PTR_PM_OPAQUE         = 0x00000010;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "PageModePrintDirection"  Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PTR_PD_LEFT_TO_RIGHT = 1;
+    public static final int PTR_PD_BOTTOM_TO_TOP = 2;
+    public static final int PTR_PD_RIGHT_TO_LEFT = 3;
+    public static final int PTR_PD_TOP_TO_BOTTOM = 4;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "clearPrintArea" and "pageModePrint" Method Constant
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PTR_PM_PAGE_MODE      = 1;
+    public static final int PTR_PM_PRINT_SAVE     = 2;
+    public static final int PTR_PM_NORMAL         = 3;
+    public static final int PTR_PM_CANCEL         = 4;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "CutPaper" Method Constant
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PTR_CP_FULLCUT       = 100;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "PrintBarCode" Method Constants:
+    /////////////////////////////////////////////////////////////////////
+
+    //   "Alignment" Parameter
+    //     Either the distance from the left-most print column to the start
+    //     of the bar code, or one of the following:
+
+    public static final int PTR_BC_LEFT          = -1;
+    public static final int PTR_BC_CENTER        = -2;
+    public static final int PTR_BC_RIGHT         = -3;
+
+    //   "TextPosition" Parameter
+
+    public static final int PTR_BC_TEXT_NONE     = -11;
+    public static final int PTR_BC_TEXT_ABOVE    = -12;
+    public static final int PTR_BC_TEXT_BELOW    = -13;
+
+    //   "Symbology" Parameter:
+
+    //     One dimensional symbologies
+    public static final int PTR_BCS_UPCA           = 101;  // Digits
+    public static final int PTR_BCS_UPCE           = 102;  // Digits
+    public static final int PTR_BCS_JAN8           = 103;  // = EAN 8
+    public static final int PTR_BCS_EAN8           = 103;  // = JAN 8 (added in 1.2)
+    public static final int PTR_BCS_JAN13          = 104;  // = EAN 13
+    public static final int PTR_BCS_EAN13          = 104;  // = JAN 13 (added in 1.2)
+    public static final int PTR_BCS_TF             = 105;  // (Discrete 2 of 5) Digits
+    public static final int PTR_BCS_ITF            = 106;  // (Interleaved 2 of 5) Digits
+    public static final int PTR_BCS_Codabar        = 107;  // Digits, -, $, :, /, ., +;
+                                                           //   4 start/stop characters
+                                                           //   (a, b, c, d)
+    public static final int PTR_BCS_Code39         = 108;  // Alpha, Digits, Space, -, .,
+                                                           //   $, /, +, %; start/stop (*)
+                                                           // Also has Full ASCII feature
+    public static final int PTR_BCS_Code93         = 109;  // Same characters as Code 39
+    public static final int PTR_BCS_Code128        = 110;  // 128 data characters
+    //        (The following were added in Release 1.2)
+    public static final int PTR_BCS_UPCA_S         = 111;  // UPC-A with supplemental
+                                                           //   barcode
+    public static final int PTR_BCS_UPCE_S         = 112;  // UPC-E with supplemental
+                                                           //   barcode
+    public static final int PTR_BCS_UPCD1          = 113;  // UPC-D1
+    public static final int PTR_BCS_UPCD2          = 114;  // UPC-D2
+    public static final int PTR_BCS_UPCD3          = 115;  // UPC-D3
+    public static final int PTR_BCS_UPCD4          = 116;  // UPC-D4
+    public static final int PTR_BCS_UPCD5          = 117;  // UPC-D5
+    public static final int PTR_BCS_EAN8_S         = 118;  // EAN 8 with supplemental
+                                                           //   barcode
+    public static final int PTR_BCS_EAN13_S        = 119;  // EAN 13 with supplemental
+                                                           //   barcode
+    public static final int PTR_BCS_EAN128         = 120;  // EAN 128
+    public static final int PTR_BCS_OCRA           = 121;  // OCR "A"
+    public static final int PTR_BCS_OCRB           = 122;  // OCR "B"
+
+    // Added in Release 1.8
+    public static final int PTR_BCS_Code128_Parsed = 123;
+       // The followings RSS have been deprecated in 1.12. Use the GS1DATABAR constants below instead.
+    public static final int PTR_BCS_RSS14          = 131;  // Reduced Space Symbology - 14 digit GTIN
+    public static final int PTR_BCS_RSS_EXPANDED   = 132;  // RSS - 14 digit GTIN plus additional fields
+
+    // Added in Release 1.12
+    public static final int PTR_BCS_GS1DATABAR     = 131;  // GS1 DataBar Omnidirectional
+    public static final int PTR_BCS_GS1DATABAR_E   = 132;  // GS1 DataBar Expanded
+    public static final int PTR_BCS_GS1DATABAR_S   = 133;  // GS1 DataBar Stacked Omnidirectional
+    public static final int PTR_BCS_GS1DATABAR_E_S = 134;  // GS1 DataBar Expanded Stacked
+
+    //     Two dimensional symbologies
+    public static final int PTR_BCS_PDF417       = 201;
+    public static final int PTR_BCS_MAXICODE     = 202;
+
+    // Added in Release 1.13
+    public static final int PTR_BCS_DATAMATRIX   = 203; // Data Matrix
+    public static final int PTR_BCS_QRCODE       = 204; // QR Code
+    public static final int PTR_BCS_UQRCODE      = 205; // Micro QR Code
+    public static final int PTR_BCS_AZTEC        = 206; // Aztec
+    public static final int PTR_BCS_UPDF417      = 207; // Micro PDF 417
+
+    //     Start of Printer-Specific bar code symbologies
+    public static final int PTR_BCS_OTHER        = 501;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "PrintBitmap" and "PrintMemoryBitmap" Method Constants:
+    /////////////////////////////////////////////////////////////////////
+
+    //   "Width" Parameter
+    //     Either bitmap width or:
+    public static final int PTR_BM_ASIS          = -11;  // One pixel per printer dot
+
+    //   "Alignment" Parameter
+    //     Either the distance from the left-most print column to the start
+    //     of the bitmap, or one of the following:
+    public static final int PTR_BM_LEFT          = -1;
+    public static final int PTR_BM_CENTER        = -2;
+    public static final int PTR_BM_RIGHT         = -3;
+
+    //   "Type" Parameter ("PrintMemoryBitmap" only)
+    public static final int PTR_BMT_BMP          = 1;
+    public static final int PTR_BMT_JPEG         = 2;
+    public static final int PTR_BMT_GIF          = 3;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "RotatePrint" Method: "Rotation" Parameter Constants
+    // "RotateSpecial" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PTR_RP_NORMAL        = 0x0001;
+    public static final int PTR_RP_RIGHT90       = 0x0101;
+    public static final int PTR_RP_LEFT90        = 0x0102;
+    public static final int PTR_RP_ROTATE180     = 0x0103;
+
+    // Version 1.7. One of the following values can be
+    // ORed with one of the above values.
+    public static final int PTR_RP_BARCODE       = 0x1000;
+    public static final int PTR_RP_BITMAP        = 0x2000;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "SetLogo" Method: "Location" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PTR_L_TOP            = 1;
+    public static final int PTR_L_BOTTOM         = 2;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "TransactionPrint" Method: "Control" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PTR_TP_TRANSACTION   = 11;
+    public static final int PTR_TP_NORMAL        = 12;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "MarkFeed" Method: "Type" Parameter Constants
+    // "CapRecMarkFeed" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PTR_MF_TO_TAKEUP      = 1;
+    public static final int PTR_MF_TO_CUTTER      = 2;
+    public static final int PTR_MF_TO_CURRENT_TOF = 4;
+    public static final int PTR_MF_TO_NEXT_TOF    = 8;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "ChangePrintSide" Method: "Side" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PTR_PS_UNKNOWN  = 0;
+    public static final int PTR_PS_SIDE1    = 1;
+    public static final int PTR_PS_SIDE2    = 2;
+    public static final int PTR_PS_OPPOSITE = 3;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "drawRuledLine" Method: "lineDirection" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PTR_RL_HORIZONTAL = 1; // Added in 1.13
+    public static final int PTR_RL_VERTICAL   = 2; // Added in 1.13
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "drawRuledLine" Method: "lineStyle" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PTR_LS_SINGLE_SOLID_LINE = 1; // Added in 1.13
+    public static final int PTR_LS_DOUBLE_SOLID_LINE = 2; // Added in 1.13
+    public static final int PTR_LS_BROKEN_LINE       = 3; // Added in 1.13
+    public static final int PTR_LS_CHAIN_LINE        = 4; // Added in 1.13
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "StatusUpdateEvent" Event: "status" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PTR_SUE_COVER_OPEN   =   11;
+    public static final int PTR_SUE_COVER_OK     =   12;
+
+    public static final int PTR_SUE_JRN_EMPTY    =   21;
+    public static final int PTR_SUE_JRN_NEAREMPTY=   22;
+    public static final int PTR_SUE_JRN_PAPEROK  =   23;
+
+    public static final int PTR_SUE_REC_EMPTY    =   24;
+    public static final int PTR_SUE_REC_NEAREMPTY=   25;
+    public static final int PTR_SUE_REC_PAPEROK  =   26;
+
+    public static final int PTR_SUE_SLP_EMPTY    =   27;
+    public static final int PTR_SUE_SLP_NEAREMPTY=   28;
+    public static final int PTR_SUE_SLP_PAPEROK  =   29;
+
+    public static final int PTR_SUE_JRN_CARTRIDGE_EMPTY     = 41;
+    public static final int PTR_SUE_JRN_CARTRIDGE_NEAREMPTY = 42;
+    public static final int PTR_SUE_JRN_HEAD_CLEANING       = 43;
+    public static final int PTR_SUE_JRN_CARTDRIGE_OK        = 44;
+    public static final int PTR_SUE_JRN_CARTRIDGE_OK        = 44;
+
+    public static final int PTR_SUE_REC_CARTRIDGE_EMPTY     = 45;
+    public static final int PTR_SUE_REC_CARTRIDGE_NEAREMPTY = 46;
+    public static final int PTR_SUE_REC_HEAD_CLEANING       = 47;
+    public static final int PTR_SUE_REC_CARTDRIGE_OK        = 48;
+    public static final int PTR_SUE_REC_CARTRIDGE_OK        = 48;
+
+    public static final int PTR_SUE_SLP_CARTRIDGE_EMPTY     = 49;
+    public static final int PTR_SUE_SLP_CARTRIDGE_NEAREMPTY = 50;
+    public static final int PTR_SUE_SLP_HEAD_CLEANING       = 51;
+    public static final int PTR_SUE_SLP_CARTDRIGE_OK        = 52;
+    public static final int PTR_SUE_SLP_CARTRIDGE_OK        = 52;
+
+    public static final int PTR_SUE_IDLE         = 1001;
+
+    // Added in Release 1.8
+    public static final int PTR_SUE_JRN_COVER_OPEN = 60;
+    public static final int PTR_SUE_JRN_COVER_OK   = 61;
+    public static final int PTR_SUE_REC_COVER_OPEN = 62;
+    public static final int PTR_SUE_REC_COVER_OK   = 63;
+    public static final int PTR_SUE_SLP_COVER_OPEN = 64;
+    public static final int PTR_SUE_SLP_COVER_OK   = 65;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "ResultCodeExtended" Property Constants for Printer
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int JPOS_EPTR_COVER_OPEN = 1 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EPTR_JRN_EMPTY  = 2 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EPTR_REC_EMPTY  = 3 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EPTR_SLP_EMPTY  = 4 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EPTR_SLP_FORM   = 5 + JposConst.JPOSERREXT; // EndRemoval
+    public static final int JPOS_EPTR_TOOBIG     = 6 + JposConst.JPOSERREXT; // PrintBitmap
+    public static final int JPOS_EPTR_BADFORMAT  = 7 + JposConst.JPOSERREXT; // PrintBitmap
+    public static final int JPOS_EPTR_JRN_CARTRIDGE_REMOVED = 8 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EPTR_JRN_CARTRIDGE_EMPTY   = 9 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EPTR_JRN_HEAD_CLEANING     = 10 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EPTR_REC_CARTRIDGE_REMOVED = 11 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EPTR_REC_CARTRIDGE_EMPTY   = 12 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EPTR_REC_HEAD_CLEANING     = 13 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EPTR_SLP_CARTRIDGE_REMOVED = 14 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EPTR_SLP_CARTRIDGE_EMPTY   = 15 + JposConst.JPOSERREXT; // (Several)
+    public static final int JPOS_EPTR_SLP_HEAD_CLEANING     = 16 + JposConst.JPOSERREXT; // (Several)
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl110.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl110.java
new file mode 100644
index 0000000..57ceadf
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl110.java
@@ -0,0 +1,34 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterControl110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Printer for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSPrinterControl110 extends POSPrinterControl19
+{
+  // Methods
+  public void    printMemoryBitmap(int station, byte[] data, int type,
+                                   int width, int alignment)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl111.java
new file mode 100644
index 0000000..47999ac
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Printer for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSPrinterControl111 extends POSPrinterControl110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl112.java
new file mode 100644
index 0000000..adc8f62
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Printer for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSPrinterControl112 extends POSPrinterControl111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl113.java
new file mode 100644
index 0000000..8cb0db9
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl113.java
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Printer for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSPrinterControl113 extends POSPrinterControl112
+{
+  // Capabilities
+  public int getCapRecRuledLine() throws JposException;
+  public int getCapSlpRuledLine() throws JposException;
+
+  // Methods
+  public void drawRuledLine(int station, String positionList,
+                            int lineDirection, int lineWidth,
+                            int lineStyle, int lineColor)
+    throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl114.java
new file mode 100644
index 0000000..a478aa3
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to POS Printer for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSPrinterControl114 extends POSPrinterControl113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl12.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl12.java
new file mode 100644
index 0000000..08bb95d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl12.java
@@ -0,0 +1,182 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterControl12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to POS Printer for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSPrinterControl12 extends BaseControl
+{
+    // Capabilities
+    public int     getCapCharacterSet() throws JposException;
+    public boolean getCapConcurrentJrnRec() throws JposException;
+    public boolean getCapConcurrentJrnSlp() throws JposException;
+    public boolean getCapConcurrentRecSlp() throws JposException;
+    public boolean getCapCoverSensor() throws JposException;
+    public boolean getCapJrn2Color() throws JposException;
+    public boolean getCapJrnBold() throws JposException;
+    public boolean getCapJrnDhigh() throws JposException;
+    public boolean getCapJrnDwide() throws JposException;
+    public boolean getCapJrnDwideDhigh() throws JposException;
+    public boolean getCapJrnEmptySensor() throws JposException;
+    public boolean getCapJrnItalic() throws JposException;
+    public boolean getCapJrnNearEndSensor() throws JposException;
+    public boolean getCapJrnPresent() throws JposException;
+    public boolean getCapJrnUnderline() throws JposException;
+    public boolean getCapRec2Color() throws JposException;
+    public boolean getCapRecBarCode() throws JposException;
+    public boolean getCapRecBitmap() throws JposException;
+    public boolean getCapRecBold() throws JposException;
+    public boolean getCapRecDhigh() throws JposException;
+    public boolean getCapRecDwide() throws JposException;
+    public boolean getCapRecDwideDhigh() throws JposException;
+    public boolean getCapRecEmptySensor() throws JposException;
+    public boolean getCapRecItalic() throws JposException;
+    public boolean getCapRecLeft90() throws JposException;
+    public boolean getCapRecNearEndSensor() throws JposException;
+    public boolean getCapRecPapercut() throws JposException;
+    public boolean getCapRecPresent() throws JposException;
+    public boolean getCapRecRight90() throws JposException;
+    public boolean getCapRecRotate180() throws JposException;
+    public boolean getCapRecStamp() throws JposException;
+    public boolean getCapRecUnderline() throws JposException;
+    public boolean getCapSlp2Color() throws JposException;
+    public boolean getCapSlpBarCode() throws JposException;
+    public boolean getCapSlpBitmap() throws JposException;
+    public boolean getCapSlpBold() throws JposException;
+    public boolean getCapSlpDhigh() throws JposException;
+    public boolean getCapSlpDwide() throws JposException;
+    public boolean getCapSlpDwideDhigh() throws JposException;
+    public boolean getCapSlpEmptySensor() throws JposException;
+    public boolean getCapSlpFullslip() throws JposException;
+    public boolean getCapSlpItalic() throws JposException;
+    public boolean getCapSlpLeft90() throws JposException;
+    public boolean getCapSlpNearEndSensor() throws JposException;
+    public boolean getCapSlpPresent() throws JposException;
+    public boolean getCapSlpRight90() throws JposException;
+    public boolean getCapSlpRotate180() throws JposException;
+    public boolean getCapSlpUnderline() throws JposException;
+    public boolean getCapTransaction() throws JposException;
+
+    // Properties
+    public boolean getAsyncMode() throws JposException;
+    public void    setAsyncMode(boolean asyncMode) throws JposException;
+    public int     getCharacterSet() throws JposException;
+    public void    setCharacterSet(int characterSet) throws JposException;
+    public String  getCharacterSetList() throws JposException;
+    public boolean getCoverOpen() throws JposException;
+    public int     getErrorLevel() throws JposException;
+    public int     getErrorStation() throws JposException;
+    public String  getErrorString() throws JposException;
+    public boolean getFlagWhenIdle() throws JposException;
+    public void    setFlagWhenIdle(boolean flagWhenIdle) throws JposException;
+    public String  getFontTypefaceList() throws JposException;
+    public boolean getJrnEmpty() throws JposException;
+    public boolean getJrnLetterQuality() throws JposException;
+    public void    setJrnLetterQuality(boolean jrnLetterQuality)
+                       throws JposException;
+    public int     getJrnLineChars() throws JposException;
+    public void    setJrnLineChars(int jrnLineChars) throws JposException;
+    public String  getJrnLineCharsList() throws JposException;
+    public int     getJrnLineHeight() throws JposException;
+    public void    setJrnLineHeight(int jrnLineHeight) throws JposException;
+    public int     getJrnLineSpacing() throws JposException;
+    public void    setJrnLineSpacing(int jrnLineSpacing) throws JposException;
+    public int     getJrnLineWidth() throws JposException;
+    public boolean getJrnNearEnd() throws JposException;
+    public int     getMapMode() throws JposException;
+    public void    setMapMode(int mapMode) throws JposException;
+    public int     getOutputID() throws JposException;
+    public String  getRecBarCodeRotationList() throws JposException;
+    public boolean getRecEmpty() throws JposException;
+    public boolean getRecLetterQuality() throws JposException;
+    public void    setRecLetterQuality(boolean recLetterQuality)
+                       throws JposException;
+    public int     getRecLineChars() throws JposException;
+    public void    setRecLineChars(int recLineChars) throws JposException;
+    public String  getRecLineCharsList() throws JposException;
+    public int     getRecLineHeight() throws JposException;
+    public void    setRecLineHeight(int recLineHeight) throws JposException;
+    public int     getRecLineSpacing() throws JposException;
+    public void    setRecLineSpacing(int recLineSpacing) throws JposException;
+    public int     getRecLinesToPaperCut() throws JposException;
+    public int     getRecLineWidth() throws JposException;
+    public boolean getRecNearEnd() throws JposException;
+    public int     getRecSidewaysMaxChars() throws JposException;
+    public int     getRecSidewaysMaxLines() throws JposException;
+    public int     getRotateSpecial() throws JposException;
+    public void    setRotateSpecial(int rotateSpecial) throws JposException;
+    public String  getSlpBarCodeRotationList() throws JposException;
+    public boolean getSlpEmpty() throws JposException;
+    public boolean getSlpLetterQuality() throws JposException;
+    public void    setSlpLetterQuality(boolean recLetterQuality)
+                       throws JposException;
+    public int     getSlpLineChars() throws JposException;
+    public void    setSlpLineChars(int recLineChars) throws JposException;
+    public String  getSlpLineCharsList() throws JposException;
+    public int     getSlpLineHeight() throws JposException;
+    public void    setSlpLineHeight(int recLineHeight) throws JposException;
+    public int     getSlpLinesNearEndToEnd() throws JposException;
+    public int     getSlpLineSpacing() throws JposException;
+    public void    setSlpLineSpacing(int recLineSpacing) throws JposException;
+    public int     getSlpLineWidth() throws JposException;
+    public int     getSlpMaxLines() throws JposException;
+    public boolean getSlpNearEnd() throws JposException;
+    public int     getSlpSidewaysMaxChars() throws JposException;
+    public int     getSlpSidewaysMaxLines() throws JposException;
+
+    // Methods
+    public void    beginInsertion(int timeout) throws JposException;
+    public void    beginRemoval(int timeout) throws JposException;
+    public void    clearOutput() throws JposException;
+    public void    cutPaper(int percentage) throws JposException;
+    public void    endInsertion() throws JposException;
+    public void    endRemoval() throws JposException;
+    public void    printBarCode(int station, String data, int symbology,
+                                int height, int width, int alignment,
+                                int textPosition) throws JposException;
+    public void    printBitmap(int station, String fileName, int width,
+                               int alignment) throws JposException;
+    public void    printImmediate(int station, String data)
+                       throws JposException;
+    public void    printNormal(int station, String data) throws JposException;
+    public void    printTwoNormal(int stations, String data1, String data2)
+                       throws JposException;
+    public void    rotatePrint(int station, int rotation) throws JposException;
+    public void    setBitmap(int bitmapNumber, int station, String fileName,
+                             int width, int alignment) throws JposException;
+    public void    setLogo(int location, String data) throws JposException;
+    public void    transactionPrint(int station, int control)
+                       throws JposException;
+    public void    validateData(int station, String data) throws JposException;
+
+    // Event listener methods
+    public void    addDirectIOListener(DirectIOListener l);
+    public void    removeDirectIOListener(DirectIOListener l);
+    public void    addErrorListener(ErrorListener l);
+    public void    removeErrorListener(ErrorListener l);
+    public void    addOutputCompleteListener(OutputCompleteListener l);
+    public void    removeOutputCompleteListener(OutputCompleteListener l);
+    public void    addStatusUpdateListener(StatusUpdateListener l);
+    public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl13.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl13.java
new file mode 100644
index 0000000..98c2a27
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl13.java
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterControl13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Printer for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSPrinterControl13 extends POSPrinterControl12
+{
+    // Capabilities
+  public int     getCapPowerReporting() throws JposException;
+
+    // Properties
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl14.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl14.java
new file mode 100644
index 0000000..1694e9d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterControl14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Printer for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSPrinterControl14 extends POSPrinterControl13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl15.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl15.java
new file mode 100644
index 0000000..1313d2b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl15.java
@@ -0,0 +1,57 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterControl15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Printer for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 00-04-17 JavaPOS Release 1.5                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSPrinterControl15 extends POSPrinterControl14
+{
+    // Capabilities
+    public int     getCapJrnCartridgeSensor() throws JposException;
+    public int     getCapJrnColor() throws JposException;
+    public int     getCapRecCartridgeSensor() throws JposException;
+    public int     getCapRecColor() throws JposException;
+    public int     getCapRecMarkFeed() throws JposException;
+    public boolean getCapSlpBothSidesPrint() throws JposException;
+    public int     getCapSlpCartridgeSensor() throws JposException;
+    public int     getCapSlpColor() throws JposException;
+
+    // Properties
+    public int     getCartridgeNotify() throws JposException;
+    public void    setCartridgeNotify(int notify) throws JposException;
+    public int     getJrnCartridgeState() throws JposException;
+    public int     getJrnCurrentCartridge() throws JposException;
+    public void    setJrnCurrentCartridge(int cartridge) throws JposException;
+    public int     getRecCartridgeState() throws JposException;
+    public int     getRecCurrentCartridge() throws JposException;
+    public void    setRecCurrentCartridge(int cartridge) throws JposException;
+    public int     getSlpCartridgeState() throws JposException;
+    public int     getSlpCurrentCartridge() throws JposException;
+    public void    setSlpCurrentCartridge(int cartridge) throws JposException;
+    public int     getSlpPrintSide() throws JposException;
+
+    // Methods
+    public void    changePrintSide(int side) throws JposException;
+    public void    markFeed(int type) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl16.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl16.java
new file mode 100644
index 0000000..9b56f70
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl16.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterControl16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Printer for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-04-18 JavaPOS Release 1.6                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSPrinterControl16 extends POSPrinterControl15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl17.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl17.java
new file mode 100644
index 0000000..5c60335
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl17.java
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterControl17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Printer for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSPrinterControl17 extends POSPrinterControl16
+{
+  // Capabilities
+  public boolean getCapMapCharacterSet() throws JposException;
+
+  // Properties
+  public boolean getMapCharacterSet() throws JposException;
+  public void    setMapCharacterSet(boolean mapCharacterSet)
+                   throws JposException;
+  public String  getRecBitmapRotationList() throws JposException;
+  public String  getSlpBitmapRotationList() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl18.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl18.java
new file mode 100644
index 0000000..a880d1b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl18.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterControl18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Printer for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSPrinterControl18 extends POSPrinterControl17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl19.java b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl19.java
new file mode 100644
index 0000000..2b5aa09
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/POSPrinterControl19.java
@@ -0,0 +1,60 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterControl19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Printer for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface POSPrinterControl19 extends POSPrinterControl18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapConcurrentPageMode() throws JposException;
+  public boolean getCapRecPageMode() throws JposException;
+  public boolean getCapSlpPageMode() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Properties
+  public String  getPageModeArea() throws JposException;
+  public int     getPageModeDescriptor() throws JposException;
+  public int     getPageModeHorizontalPosition() throws JposException;
+  public void    setPageModeHorizontalPosition(int position) throws JposException;
+  public String  getPageModePrintArea() throws JposException;
+  public void    setPageModePrintArea(String area) throws JposException;
+  public int     getPageModePrintDirection() throws JposException;
+  public void    setPageModePrintDirection(int direction) throws JposException;
+  public int     getPageModeStation() throws JposException;
+  public void    setPageModeStation(int station) throws JposException;
+  public int     getPageModeVerticalPosition() throws JposException;
+  public void    setPageModeVerticalPosition(int position) throws JposException;
+
+  // Methods
+  public void    clearPrintArea()
+                     throws JposException;
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    pageModePrint(int control)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRW.java b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRW.java
new file mode 100644
index 0000000..caa2e57
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRW.java
@@ -0,0 +1,2894 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PointCardRW.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class PointCardRW
+  extends BaseJposControl
+  implements PointCardRWControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected PointCardRWService15 service15;
+  protected PointCardRWService16 service16;
+  protected PointCardRWService17 service17;
+  protected PointCardRWService18 service18;
+  protected PointCardRWService19 service19;
+  protected PointCardRWService110 service110;
+  protected PointCardRWService111 service111;
+  protected PointCardRWService112 service112;
+  protected PointCardRWService113 service113;
+  protected PointCardRWService114 service114;
+  protected Vector dataListeners;
+  protected Vector directIOListeners;
+  protected Vector errorListeners;
+  protected Vector outputCompleteListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public PointCardRW()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS PointCardRW Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service15 = null;
+    //service16 = null;
+    //service17 = null;
+    //service18 = null;
+    //service19 = null;
+    //service110 = null;
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    dataListeners = new Vector();
+    directIOListeners = new Vector();
+    errorListeners = new Vector();
+    outputCompleteListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapBold()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapBold();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapCardEntranceSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapCardEntranceSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapCharacterSet()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapCharacterSet();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCleanCard()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapCleanCard();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapClearPrint()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapClearPrint();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapDhigh()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapDhigh();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapDwide()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapDwide();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapDwideDhigh()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapDwideDhigh();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapItalic()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapItalic();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapLeft90()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapLeft90();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapPrint()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapPrint();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapPrintMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapPrintMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRight90()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapRight90();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRotate180()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapRotate180();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapTracksToRead()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapTracksToRead();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapTracksToWrite()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCapTracksToWrite();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapMapCharacterSet()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.7.0
+    if(serviceVersion < deviceVersion17)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.7.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getCapMapCharacterSet();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public int getCardState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCardState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCharacterSet()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCharacterSet();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setCharacterSet(int charSet)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.setCharacterSet(charSet);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getCharacterSetList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getCharacterSetList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDataCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getDataCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getDataEventEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getDataEventEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDataEventEnabled(boolean dataEventEnabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.setDataEventEnabled(dataEventEnabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getFontTypeFaceList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getFontTypeFaceList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getLineChars()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getLineChars();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setLineChars(int lineChars)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.setLineChars(lineChars);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getLineCharsList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getLineCharsList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getLineHeight()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getLineHeight();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setLineHeight(int lineHeight)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.setLineHeight(lineHeight);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getLineSpacing()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getLineSpacing();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setLineSpacing(int lineSpacing)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.setLineSpacing(lineSpacing);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getLineWidth()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getLineWidth();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getMapMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getMapMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setMapMode(int mapMode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.setMapMode(mapMode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getMaxLines()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getMaxLines();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getOutputID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getOutputID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPrintHeight()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getPrintHeight();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getReadState1()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getReadState1();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getReadState2()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getReadState2();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getRecvLength1()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getRecvLength1();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getRecvLength2()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getRecvLength2();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getSidewaysMaxChars()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getSidewaysMaxChars();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getSidewaysMaxLines()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getSidewaysMaxLines();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getTracksToRead()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getTracksToRead();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setTracksToRead(int tracksToRead)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.setTracksToRead(tracksToRead);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getTracksToWrite()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getTracksToWrite();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setTracksToWrite(int tracksToWrite)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.setTracksToWrite(tracksToWrite);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getTrack1Data()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getTrack1Data();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getTrack2Data()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getTrack2Data();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getTrack3Data()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getTrack3Data();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getTrack4Data()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getTrack4Data();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getTrack5Data()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getTrack5Data();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getTrack6Data()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getTrack6Data();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getWriteState1()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getWriteState1();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getWriteState2()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getWriteState2();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getWrite1Data()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getWrite1Data();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setWrite1Data(String data)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.setWrite1Data(data);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getWrite2Data()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getWrite2Data();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setWrite2Data(String data)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.setWrite2Data(data);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getWrite3Data()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getWrite3Data();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setWrite3Data(String data)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.setWrite3Data(data);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getWrite4Data()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getWrite4Data();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setWrite4Data(String data)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.setWrite4Data(data);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getWrite5Data()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getWrite5Data();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setWrite5Data(String data)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.setWrite5Data(data);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getWrite6Data()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service15.getWrite6Data();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setWrite6Data(String data)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.setWrite6Data(data);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getMapCharacterSet()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.7.0
+    if(serviceVersion < deviceVersion17)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.7.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getMapCharacterSet();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setMapCharacterSet(boolean mapCharacterSet)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.7.0
+    if(serviceVersion < deviceVersion17)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.7.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.setMapCharacterSet(mapCharacterSet);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void beginInsertion(int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.beginInsertion(timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void beginRemoval(int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.beginRemoval(timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void cleanCard()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.cleanCard();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearInput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.clearInput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearOutput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.clearOutput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearPrintWrite(int kind, int hPosition, int vPosition, int width, int height)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.clearPrintWrite(kind, hPosition, vPosition, width, height);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void endInsertion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.endInsertion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void endRemoval()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.endRemoval();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void printWrite(int kind, int hPosition, int vPosition, String data)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.printWrite(kind, hPosition, vPosition, data);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void rotatePrint(int rotation)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.rotatePrint(rotation);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void validateData(String data)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service15.validateData(data);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearInputProperties()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.10.0
+    if(serviceVersion < deviceVersion110)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.10.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.clearInputProperties();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new PointCardRWCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service15 = null;
+      service16 = null;
+      service17 = null;
+      service18 = null;
+      service19 = null;
+      service110 = null;
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion15)
+      {
+        try
+        {
+          service15 = (PointCardRWService15)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement PointCardRWService15 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion16)
+      {
+        try
+        {
+          service16 = (PointCardRWService16)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement PointCardRWService16 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion17)
+      {
+        try
+        {
+          service17 = (PointCardRWService17)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement PointCardRWService17 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion18)
+      {
+        try
+        {
+          service18 = (PointCardRWService18)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement PointCardRWService18 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion19)
+      {
+        try
+        {
+          service19 = (PointCardRWService19)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement PointCardRWService19 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion110)
+      {
+        try
+        {
+          service110 = (PointCardRWService110)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement PointCardRWService110 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (PointCardRWService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement PointCardRWService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (PointCardRWService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement PointCardRWService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (PointCardRWService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement PointCardRWService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (PointCardRWService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement PointCardRWService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.addElement(l);
+    }
+  }
+
+  public void removeDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.removeElement(l);
+    }
+  }
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.addElement(l);
+    }
+  }
+
+  public void removeErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.removeElement(l);
+    }
+  }
+
+  public void addOutputCompleteListener(OutputCompleteListener l)
+  {
+    synchronized(outputCompleteListeners)
+    {
+      outputCompleteListeners.addElement(l);
+    }
+  }
+
+  public void removeOutputCompleteListener(OutputCompleteListener l)
+  {
+    synchronized(outputCompleteListeners)
+    {
+      outputCompleteListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class PointCardRWCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)PointCardRW.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+      synchronized(PointCardRW.this.dataListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < dataListeners.size(); x++)
+        {
+          ((DataListener)dataListeners.elementAt(x)).dataOccurred(e);
+        }
+      }
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(PointCardRW.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+      synchronized(PointCardRW.this.errorListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < errorListeners.size(); x++)
+        {
+          ((ErrorListener)errorListeners.elementAt(x)).errorOccurred(e);
+        }
+      }
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+      synchronized(PointCardRW.this.outputCompleteListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < outputCompleteListeners.size(); x++)
+        {
+          ((OutputCompleteListener)outputCompleteListeners.elementAt(x)).outputCompleteOccurred(e);
+        }
+      }
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(PointCardRW.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRW.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRW.manifest.stub
new file mode 100644
index 0000000..cb5fd6c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRW.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/PointCardRW.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWBeanInfo.java
new file mode 100644
index 0000000..ba6c36f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWBeanInfo.java
@@ -0,0 +1,147 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// PointCardRWBeanInfo.java - Bean information for the JavaPOS PointCardRW
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class PointCardRWBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.PointCardRW.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.PointCardRW.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapBold"),
+        makeProperty("CapCardEntranceSensor"),
+        makeProperty("CapCharacterSet"),
+        makeProperty("CapCleanCard"),
+        makeProperty("CapClearPrint"),
+        makeProperty("CapDhigh"),
+        makeProperty("CapDwide"),
+        makeProperty("CapDwideDhigh"),
+        makeProperty("CapItalic"),
+        makeProperty("CapLeft90"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapPrint"),
+        makeProperty("CapPrintMode"),
+        makeProperty("CapRight90"),
+        makeProperty("CapRotate180"),
+        makeProperty("CapTracksToRead"),
+        makeProperty("CapTracksToWrite"),
+        makeProperty("CapMapCharacterSet"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapUpdateFirmware"),
+
+        // Properties
+        makeProperty("CardState"),
+        makeProperty("CharacterSet"),
+        makeProperty("CharacterSetList"),
+        makeProperty("DataCount"),
+        makeProperty("DataEventEnabled"),
+        makeProperty("FontTypeFaceList"),
+        makeProperty("LineChars"),
+        makeProperty("LineCharsList"),
+        makeProperty("LineHeight"),
+        makeProperty("LineSpacing"),
+        makeProperty("LineWidth"),
+        makeProperty("MapMode"),
+        makeProperty("MaxLines"),
+        makeProperty("OutputID"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState"),
+        makeProperty("PrintHeight"),
+        makeProperty("ReadState1"),
+        makeProperty("ReadState2"),
+        makeProperty("RecvLength1"),
+        makeProperty("RecvLength2"),
+        makeProperty("SidewaysMaxChars"),
+        makeProperty("SidewaysMaxLines"),
+        makeProperty("TracksToRead"),
+        makeProperty("TracksToWrite"),
+        makeProperty("Track1Data"),
+        makeProperty("Track2Data"),
+        makeProperty("Track3Data"),
+        makeProperty("Track4Data"),
+        makeProperty("Track5Data"),
+        makeProperty("Track6Data"),
+        makeProperty("WriteState1"),
+        makeProperty("WriteState2"),
+        makeProperty("Write1Data"),
+        makeProperty("Write2Data"),
+        makeProperty("Write3Data"),
+        makeProperty("Write4Data"),
+        makeProperty("Write5Data"),
+        makeProperty("Write6Data"),
+        makeProperty("MapCharacterSet"),
+
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.PointCardRW.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("Data"),
+        makeEvent("DirectIO"),
+        makeEvent("Error"),
+        makeEvent("OutputComplete"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWConst.java
new file mode 100644
index 0000000..efe47a7
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWConst.java
@@ -0,0 +1,131 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PointCardRWConst
+//
+//   PointCardRW constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2000-Apr-18 JavaPOS Release 1.5                                 BS
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//   Added the following constants (misnamed originally) :
+//     PCRW_SUE_NOCARD
+//     PCRW_SUE_REMAINING
+//     PCRW_SUE_INRW
+//   Removed the following constant which was included incorrectly:
+//     PCRW_RP_NORMAL_ASYNC
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface PointCardRWConst
+{
+    /////////////////////////////////////////////////////////////////////
+    // "CapCharacterSet" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PCRW_CCS_ALPHA        =   1;
+    public static final int PCRW_CCS_ASCII        = 998;
+    public static final int PCRW_CCS_KANA         =  10;
+    public static final int PCRW_CCS_KANJI        =  11;
+    public static final int PCRW_CCS_UNICODE      = 997;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "CharacterSet" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PCRW_CS_UNICODE       = 997;
+    public static final int PCRW_CS_ASCII         = 998;
+    public static final int PCRW_CS_ANSI          = 999;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "CardState" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PCRW_STATE_NOCARD     = 1;
+    public static final int PCRW_STATE_REMAINING  = 2;
+    public static final int PCRW_STATE_INRW       = 3;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // CapTrackToRead and TrackToWrite Property constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PCRW_TRACK1   = 0x0001;
+    public static final int PCRW_TRACK2   = 0x0002;
+    public static final int PCRW_TRACK3   = 0x0004;
+    public static final int PCRW_TRACK4   = 0x0008;
+    public static final int PCRW_TRACK5   = 0x0010;
+    public static final int PCRW_TRACK6   = 0x0020;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "MapMode" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PCRW_MM_DOTS          = 1;
+    public static final int PCRW_MM_TWIPS         = 2;
+    public static final int PCRW_MM_ENGLISH       = 3;
+    public static final int PCRW_MM_METRIC        = 4;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "RotatePrint" Method: "Rotation" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PCRW_RP_NORMAL        = 0x0001;
+    // In drafts of spec, but not in final - should never have been defined.
+    //public static final int PCRW_RP_NORMAL_ASYNC  = 0x0002;
+
+    public static final int PCRW_RP_RIGHT90       = 0x0101;
+    public static final int PCRW_RP_LEFT90        = 0x0102;
+    public static final int PCRW_RP_ROTATE180     = 0x0103;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // Status Update Event: "Status" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int PCRW_SUE_STATE_NOCARD     = 1;
+    public static final int PCRW_SUE_STATE_REMAINING  = 2;
+    public static final int PCRW_SUE_STATE_INRW       = 3;
+
+    public static final int PCRW_SUE_NOCARD           = 1;
+    public static final int PCRW_SUE_REMAINING        = 2;
+    public static final int PCRW_SUE_INRW             = 3;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "ErrorCodeExtended" Property (ErrorEvent) Constants for PintCardRW
+    //   Also used in "ReaseStateX" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int JPOS_EPCRW_READ    =  1 + JposConst.JPOSERREXT;
+    public static final int JPOS_EPCRW_WRITE   =  2 + JposConst.JPOSERREXT;
+    public static final int JPOS_EPCRW_JAM     =  3 + JposConst.JPOSERREXT;
+    public static final int JPOS_EPCRW_MOTOR   =  4 + JposConst.JPOSERREXT;
+    public static final int JPOS_EPCRW_COVER   =  5 + JposConst.JPOSERREXT;
+    public static final int JPOS_EPCRW_PRINTER =  6 + JposConst.JPOSERREXT;
+    public static final int JPOS_EPCRW_RELEASE =  7 + JposConst.JPOSERREXT;
+    public static final int JPOS_EPCRW_DISPLAY =  8 + JposConst.JPOSERREXT;
+    public static final int JPOS_EPCRW_NOCARD  =  9 + JposConst.JPOSERREXT;
+    public static final int JPOS_EPCRW_START   = 10 + JposConst.JPOSERREXT;
+    public static final int JPOS_EPCRW_END     = 11 + JposConst.JPOSERREXT;
+    public static final int JPOS_EPCRW_PARITY  = 12 + JposConst.JPOSERREXT;
+    public static final int JPOS_EPCRW_ENCODE  = 13 + JposConst.JPOSERREXT;
+    public static final int JPOS_EPCRW_LRC     = 14 + JposConst.JPOSERREXT;
+    public static final int JPOS_EPCRW_VERIFY  = 15 + JposConst.JPOSERREXT;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl110.java b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl110.java
new file mode 100644
index 0000000..7cb30d5
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl110.java
@@ -0,0 +1,34 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PointCardRWControl110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Point Card Reader Writer for
+//   release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface PointCardRWControl110 extends PointCardRWControl19
+{
+  // Methods
+  public void    clearInputProperties()
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl111.java
new file mode 100644
index 0000000..b2d7af5
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl111.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PointCardRWControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Point Card Reader Writer for
+//   release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface PointCardRWControl111 extends PointCardRWControl110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl112.java
new file mode 100644
index 0000000..2670bfa
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl112.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PointCardRWControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Point Card Reader Writer for
+//   release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface PointCardRWControl112 extends PointCardRWControl111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl113.java
new file mode 100644
index 0000000..4704bd7
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl113.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PointCardRWControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Point Card Reader Writer for
+//   release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface PointCardRWControl113 extends PointCardRWControl112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl114.java
new file mode 100644
index 0000000..a3cf211
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PointCardRWControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Point Card Reader Writer for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface PointCardRWControl114 extends PointCardRWControl113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl15.java b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl15.java
new file mode 100644
index 0000000..da73534
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl15.java
@@ -0,0 +1,133 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PointCardRWControl15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Point Card Reader Writer for
+//   release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2000-Apr-18 JavaPOS Release 1.5                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface PointCardRWControl15 extends BaseControl
+{
+    // Capabilities
+    public boolean getCapBold() throws JposException;
+    public int     getCapCardEntranceSensor() throws JposException;
+    public int     getCapCharacterSet() throws JposException;
+    public boolean getCapCleanCard() throws JposException;
+    public boolean getCapClearPrint() throws JposException;
+    public boolean getCapDhigh() throws JposException;
+    public boolean getCapDwide() throws JposException;
+    public boolean getCapDwideDhigh() throws JposException;
+    public boolean getCapItalic() throws JposException;
+    public boolean getCapLeft90() throws JposException;
+    public int     getCapPowerReporting() throws JposException;
+    public boolean getCapPrint() throws JposException;
+    public boolean getCapPrintMode() throws JposException;
+    public boolean getCapRight90() throws JposException;
+    public boolean getCapRotate180() throws JposException;
+    public int     getCapTracksToRead() throws JposException;
+    public int     getCapTracksToWrite() throws JposException;
+
+    // Properties
+    public int     getCardState() throws JposException;
+    public int     getCharacterSet() throws JposException;
+    public void    setCharacterSet(int charSet) throws JposException;
+    public String  getCharacterSetList() throws JposException;
+    public int     getDataCount() throws JposException;
+    public boolean getDataEventEnabled() throws JposException;
+    public void    setDataEventEnabled(boolean dataEventEnabled)
+                       throws JposException;
+    public String  getFontTypeFaceList() throws JposException;
+    public int     getLineChars() throws JposException;
+    public void    setLineChars(int lineChars) throws JposException;
+    public String  getLineCharsList() throws JposException;
+    public int     getLineHeight() throws JposException;
+    public void    setLineHeight(int lineHeight) throws JposException;
+    public int     getLineSpacing() throws JposException;
+    public void    setLineSpacing(int lineSpacing) throws JposException;
+    public int     getLineWidth() throws JposException;
+    public int     getMapMode() throws JposException;
+    public void    setMapMode(int mapMode) throws JposException;
+    public int     getMaxLines() throws JposException;
+    public int     getOutputID() throws JposException;
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+    public int     getPrintHeight() throws JposException;
+    public int     getReadState1() throws JposException;
+    public int     getReadState2() throws JposException;
+    public int     getRecvLength1() throws JposException;
+    public int     getRecvLength2() throws JposException;
+    public int     getSidewaysMaxChars() throws JposException;
+    public int     getSidewaysMaxLines() throws JposException;
+    public int     getTracksToRead() throws JposException;
+    public void    setTracksToRead(int tracksToRead) throws JposException;
+    public int     getTracksToWrite() throws JposException;
+    public void    setTracksToWrite(int tracksToWrite) throws JposException;
+    public String  getTrack1Data() throws JposException;
+    public String  getTrack2Data() throws JposException;
+    public String  getTrack3Data() throws JposException;
+    public String  getTrack4Data() throws JposException;
+    public String  getTrack5Data() throws JposException;
+    public String  getTrack6Data() throws JposException;
+    public int     getWriteState1() throws JposException;
+    public int     getWriteState2() throws JposException;
+    public String  getWrite1Data() throws JposException;
+    public void    setWrite1Data(String data) throws JposException;
+    public String  getWrite2Data() throws JposException;
+    public void    setWrite2Data(String data) throws JposException;
+    public String  getWrite3Data() throws JposException;
+    public void    setWrite3Data(String data) throws JposException;
+    public String  getWrite4Data() throws JposException;
+    public void    setWrite4Data(String data) throws JposException;
+    public String  getWrite5Data() throws JposException;
+    public void    setWrite5Data(String data) throws JposException;
+    public String  getWrite6Data() throws JposException;
+    public void    setWrite6Data(String data) throws JposException;
+
+    // Methods
+    public void    beginInsertion(int timeout) throws JposException;
+    public void    beginRemoval(int timeout) throws JposException;
+    public void    cleanCard() throws JposException;
+    public void    clearInput() throws JposException;
+    public void    clearOutput() throws JposException;
+    public void    clearPrintWrite(int kind, int hPosition, int vPosition,
+                                   int width, int height) throws JposException;
+    public void    endInsertion() throws JposException;
+    public void    endRemoval() throws JposException;
+    public void    printWrite(int kind, int hPosition, int vPosition,
+                              String data) throws JposException;
+    public void    rotatePrint(int rotation) throws JposException;
+    public void    validateData(String data) throws JposException;
+
+    // Event listener methods
+    public void    addDataListener(DataListener l);
+    public void    removeDataListener(DataListener l);
+    public void    addDirectIOListener(DirectIOListener l);
+    public void    removeDirectIOListener(DirectIOListener l);
+    public void    addErrorListener(ErrorListener l);
+    public void    removeErrorListener(ErrorListener l);
+    public void    addOutputCompleteListener(OutputCompleteListener l);
+    public void    removeOutputCompleteListener(OutputCompleteListener l);
+    public void    addStatusUpdateListener(StatusUpdateListener l);
+    public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl16.java b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl16.java
new file mode 100644
index 0000000..7ae6ef1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl16.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PointCardRWControl16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Point Card Reader Writer for
+//   release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2000-Apr-18 JavaPOS Release 1.6                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface PointCardRWControl16 extends PointCardRWControl15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl17.java b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl17.java
new file mode 100644
index 0000000..81d6dbc
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl17.java
@@ -0,0 +1,38 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PointCardRWControl17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Point Card Reader Writer for
+//   release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface PointCardRWControl17 extends PointCardRWControl16
+{
+  // Capabilities
+  public boolean getCapMapCharacterSet() throws JposException;
+
+  // Properties
+  public boolean getMapCharacterSet() throws JposException;
+  public void    setMapCharacterSet(boolean mapCharacterSet)
+                   throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl18.java b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl18.java
new file mode 100644
index 0000000..67e5945
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl18.java
@@ -0,0 +1,42 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PointCardRWControl18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Point Card Reader Writer for
+//   release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface PointCardRWControl18 extends PointCardRWControl17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl19.java b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl19.java
new file mode 100644
index 0000000..4696c62
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/PointCardRWControl19.java
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PointCardRWControl19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Point Card Reader Writer for
+//   release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface PointCardRWControl19 extends PointCardRWControl18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/RFIDScanner.java b/org.eclipse.osbp.fork.jpos/src/jpos/RFIDScanner.java
new file mode 100644
index 0000000..9a5630f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/RFIDScanner.java
@@ -0,0 +1,1509 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RFIDScanner.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class RFIDScanner
+  extends BaseJposControl
+  implements RFIDScannerControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected RFIDScannerService112 service112;
+  protected RFIDScannerService113 service113;
+  protected RFIDScannerService114 service114;
+  protected Vector dataListeners;
+  protected Vector directIOListeners;
+  protected Vector errorListeners;
+  protected Vector outputCompleteListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public RFIDScanner()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS RFIDScanner Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    dataListeners = new Vector();
+    directIOListeners = new Vector();
+    errorListeners = new Vector();
+    outputCompleteListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapContinuousRead()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapContinuousRead();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapDisableTag()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapDisableTag();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapLockTag()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapLockTag();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapMultipleProtocols()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapMultipleProtocols();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapReadTimer()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapReadTimer();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRealTimeData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapRealTimeData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapWriteTag()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCapWriteTag();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public boolean getAutoDisable()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getAutoDisable();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAutoDisable(boolean autoDisable)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setAutoDisable(autoDisable);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getContinuousReadMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getContinuousReadMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public byte[] getCurrentTagID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCurrentTagID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCurrentTagProtocol()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCurrentTagProtocol();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public byte[] getCurrentTagUserData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getCurrentTagUserData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDataCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getDataCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getDataEventEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getDataEventEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDataEventEnabled(boolean dataEventEnabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setDataEventEnabled(dataEventEnabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getOutputID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getOutputID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getProtocolMask()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getProtocolMask();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setProtocolMask(int protocolMask)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setProtocolMask(protocolMask);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getReadTimerInterval()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getReadTimerInterval();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setReadTimerInterval(int readTimerInterval)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.setReadTimerInterval(readTimerInterval);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getTagCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service112.getTagCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void clearInput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.clearInput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearInputProperties()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.clearInputProperties();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearOutput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.clearOutput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void disableTag(byte[] tagID, int timeout, byte[] password)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.disableTag(tagID, timeout, password);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void firstTag()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.firstTag();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void lockTag(byte[] tagID, int timeout, byte[] password)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.lockTag(tagID, timeout, password);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void nextTag()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.nextTag();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void previousTag()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.previousTag();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void readTags(int cmd, byte[] filterID, byte[] filtermask, int start, int length, int timeout, byte[] password)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.readTags(cmd, filterID, filtermask, start, length, timeout, password);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void startReadTags(int cmd, byte[] filterID, byte[] filtermask, int start, int length, byte[] password)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.startReadTags(cmd, filterID, filtermask, start, length, password);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void stopReadTags(byte[] password)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.stopReadTags(password);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void writeTagData(byte[] tagID, byte[] userdata, int start, int timeout, byte[] password)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.writeTagData(tagID, userdata, start, timeout, password);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void writeTagID(byte[] sourceID, byte[] destID, int timeout, byte[] password)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service112.writeTagID(sourceID, destID, timeout, password);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new RFIDScannerCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (RFIDScannerService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement RFIDScannerService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (RFIDScannerService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement RFIDScannerService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (RFIDScannerService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement RFIDScannerService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.addElement(l);
+    }
+  }
+
+  public void removeDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.removeElement(l);
+    }
+  }
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.addElement(l);
+    }
+  }
+
+  public void removeErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.removeElement(l);
+    }
+  }
+
+  public void addOutputCompleteListener(OutputCompleteListener l)
+  {
+    synchronized(outputCompleteListeners)
+    {
+      outputCompleteListeners.addElement(l);
+    }
+  }
+
+  public void removeOutputCompleteListener(OutputCompleteListener l)
+  {
+    synchronized(outputCompleteListeners)
+    {
+      outputCompleteListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class RFIDScannerCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)RFIDScanner.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+      synchronized(RFIDScanner.this.dataListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < dataListeners.size(); x++)
+        {
+          ((DataListener)dataListeners.elementAt(x)).dataOccurred(e);
+        }
+      }
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(RFIDScanner.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+      synchronized(RFIDScanner.this.errorListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < errorListeners.size(); x++)
+        {
+          ((ErrorListener)errorListeners.elementAt(x)).errorOccurred(e);
+        }
+      }
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+      synchronized(RFIDScanner.this.outputCompleteListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < outputCompleteListeners.size(); x++)
+        {
+          ((OutputCompleteListener)outputCompleteListeners.elementAt(x)).outputCompleteOccurred(e);
+        }
+      }
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(RFIDScanner.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/RFIDScanner.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/RFIDScanner.manifest.stub
new file mode 100644
index 0000000..e45563e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/RFIDScanner.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/RFIDScanner.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/RFIDScannerBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/RFIDScannerBeanInfo.java
new file mode 100644
index 0000000..95004e6
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/RFIDScannerBeanInfo.java
@@ -0,0 +1,109 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// RFIDScannerBeanInfo.java - Bean information for the JavaPOS RFIDScanner
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class RFIDScannerBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.RFIDScanner.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.RFIDScanner.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapContinuousRead"),
+        makeProperty("CapDisableTag"),
+        makeProperty("CapLockTag"),
+        makeProperty("CapMultipleProtocols"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapReadTimer"),
+        makeProperty("CapRealTimeData"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateFirmware"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapWriteTag"),
+
+        // Properties
+        makeProperty("AutoDisable"),
+        makeProperty("ContinuousReadMode"),
+        makeProperty("CurrentTagID"),
+        makeProperty("CurrentTagProtocol"),
+        makeProperty("CurrentTagUserData"),
+        makeProperty("DataCount"),
+        makeProperty("DataEventEnabled"),
+        makeProperty("OutputID"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState"),
+        makeProperty("ProtocolMask"),
+        makeProperty("ReadTimerInterval"),
+        makeProperty("TagCount")
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.RFIDScanner.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("Data"),
+        makeEvent("DirectIO"),
+        makeEvent("Error"),
+        makeEvent("OutputComplete"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/RFIDScannerConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/RFIDScannerConst.java
new file mode 100644
index 0000000..00ead37
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/RFIDScannerConst.java
@@ -0,0 +1,65 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RFIDScannerConst
+//
+//   RFIDScanner constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface RFIDScannerConst
+{
+  /////////////////////////////////////////////////////////////////////
+  // "CapWriteTag" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int RFID_CWT_NONE                        = 0;
+  public static final int RFID_CWT_ID                          = 1;
+  public static final int RFID_CWT_USERDATA                    = 2;
+  public static final int RFID_CWT_ALL                         = 3;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "CapMultipleProtocols", "CurrentTagProtocol", and
+  // "ProtocolMask" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int RFID_PR_EPC0                         = 0x00000001;
+  public static final int RFID_PR_0PLUS                        = 0x00000002;
+  public static final int RFID_PR_EPC1                         = 0x00000004;
+  public static final int RFID_PR_EPC1G2                       = 0x00000008;
+  public static final int RFID_PR_EPC2                         = 0x00000010;
+  public static final int RFID_PR_ISO14443A                    = 0x00001000;
+  public static final int RFID_PR_ISO14443B                    = 0x00002000;
+  public static final int RFID_PR_ISO15693                     = 0x00003000;
+  public static final int RFID_PR_ISO180006B                   = 0x00004000;
+  public static final int RFID_PR_OTHER                        = 0x01000000;
+  public static final int RFID_PR_ALL                          = 0x40000000; // (ProtocolMask only)
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "readTags" and "startReadTags" Methods: "Cmd" Parameter Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int RFID_RT_ID                           = 0x10;
+  public static final int RFID_RT_FULLUSERDATA                 = 0x01;
+  public static final int RFID_RT_PARTIALUSERDATA              = 0x02;
+  public static final int RFID_RT_ID_FULLUSERDATA              = 0x11;
+  public static final int RFID_RT_ID_PARTIALUSERDATA           = 0x12;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/RFIDScannerControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/RFIDScannerControl112.java
new file mode 100644
index 0000000..540a95b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/RFIDScannerControl112.java
@@ -0,0 +1,138 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group(including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RFIDScannerControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to RFID Scanner for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface RFIDScannerControl112 extends BaseControl
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapContinuousRead() throws JposException;
+  public boolean getCapDisableTag() throws JposException;
+  public boolean getCapLockTag() throws JposException;
+  public int     getCapMultipleProtocols() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public boolean getCapReadTimer() throws JposException;
+  public boolean getCapRealTimeData() throws JposException;
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+  public int     getCapWriteTag() throws JposException;
+
+  // Properties
+  public boolean getAutoDisable() throws JposException;
+  public void    setAutoDisable(boolean autoDisable) throws JposException;
+  public boolean getContinuousReadMode() throws JposException;
+  public byte[]  getCurrentTagID() throws JposException;
+  public int     getCurrentTagProtocol() throws JposException;
+  public byte[]  getCurrentTagUserData() throws JposException;
+  public int     getDataCount() throws JposException;
+  public boolean getDataEventEnabled() throws JposException;
+  public void    setDataEventEnabled(boolean dataEventEnabled)
+                     throws JposException;
+  public int     getOutputID() throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+  public int     getProtocolMask() throws JposException;
+  public void    setProtocolMask(int protocolMask) throws JposException;
+  public int     getReadTimerInterval() throws JposException;
+  public void    setReadTimerInterval(int readTimerInterval) throws JposException;
+  public int     getTagCount() throws JposException;
+
+  // Methods
+  public void    clearInput()
+                     throws JposException;
+  public void    clearInputProperties()
+                     throws JposException;
+  public void    clearOutput()
+                     throws JposException;
+  public void    compareFirmwareVersion(String firmwareFileName,
+                                        int[] result)
+                     throws JposException;
+  public void    disableTag(byte[] tagID,
+                            int timeout,
+                            byte[] password)
+                     throws JposException;
+  public void    firstTag()
+                     throws JposException;
+  public void    lockTag(byte[] tagID,
+                         int timeout,
+                         byte[] password)
+                     throws JposException;
+  public void    nextTag()
+                     throws JposException;
+  public void    previousTag()
+                     throws JposException;
+  public void    readTags(int cmd,
+                          byte[] filterID,
+                          byte[] filtermask,
+                          int start,
+                          int length,
+                          int timeout,
+                          byte[] password)
+                     throws JposException;
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    startReadTags(int cmd,
+                               byte[] filterID,
+                               byte[] filtermask,
+                               int start,
+                               int length,
+                               byte[] password)
+                     throws JposException;
+  public void    stopReadTags(byte[] password)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    writeTagData(byte[] tagID,
+                              byte[] userdata,
+                              int start,
+                              int timeout,
+                              byte[] password)
+                     throws JposException;
+  public void    writeTagID(byte[] sourceID,
+                            byte[] destID,
+                            int timeout,
+                            byte[] password)
+                     throws JposException;
+
+  // Event listener methods
+  public void    addDataListener(DataListener l);
+  public void    removeDataListener(DataListener l);
+  public void    addDirectIOListener(DirectIOListener l);
+  public void    removeDirectIOListener(DirectIOListener l);
+  public void    addErrorListener(ErrorListener l);
+  public void    removeErrorListener(ErrorListener l);
+  public void    addOutputCompleteListener(OutputCompleteListener l);
+  public void    removeOutputCompleteListener(OutputCompleteListener l);
+  public void    addStatusUpdateListener(StatusUpdateListener l);
+  public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/RFIDScannerControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/RFIDScannerControl113.java
new file mode 100644
index 0000000..8154b5a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/RFIDScannerControl113.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group(including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RFIDScannerControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to RFID Scanner for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface RFIDScannerControl113 extends RFIDScannerControl112
+{
+  // Nothing new added for release 1.13
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/RFIDScannerControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/RFIDScannerControl114.java
new file mode 100644
index 0000000..997e08d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/RFIDScannerControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group(including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RFIDScannerControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to RFID Scanner for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface RFIDScannerControl114 extends RFIDScannerControl113
+{
+  // Nothing new added for release 1.14
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplay.java b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplay.java
new file mode 100644
index 0000000..372d60c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplay.java
@@ -0,0 +1,2296 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RemoteOrderDisplay.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class RemoteOrderDisplay
+  extends BaseJposControl
+  implements RemoteOrderDisplayControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected RemoteOrderDisplayService13 service13;
+  protected RemoteOrderDisplayService14 service14;
+  protected RemoteOrderDisplayService15 service15;
+  protected RemoteOrderDisplayService16 service16;
+  protected RemoteOrderDisplayService17 service17;
+  protected RemoteOrderDisplayService18 service18;
+  protected RemoteOrderDisplayService19 service19;
+  protected RemoteOrderDisplayService110 service110;
+  protected RemoteOrderDisplayService111 service111;
+  protected RemoteOrderDisplayService112 service112;
+  protected RemoteOrderDisplayService113 service113;
+  protected RemoteOrderDisplayService114 service114;
+  protected Vector dataListeners;
+  protected Vector directIOListeners;
+  protected Vector errorListeners;
+  protected Vector outputCompleteListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public RemoteOrderDisplay()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS RemoteOrderDisplay Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service13 = null;
+    //service14 = null;
+    //service15 = null;
+    //service16 = null;
+    //service17 = null;
+    //service18 = null;
+    //service19 = null;
+    //service110 = null;
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    dataListeners = new Vector();
+    directIOListeners = new Vector();
+    errorListeners = new Vector();
+    outputCompleteListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSelectCharacterSet()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapSelectCharacterSet();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapTone()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapTone();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapTouch()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapTouch();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapTransaction()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapTransaction();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapMapCharacterSet()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.7.0
+    if(serviceVersion < deviceVersion17)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.7.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getCapMapCharacterSet();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public boolean getAsyncMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getAsyncMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAsyncMode(boolean asyncMode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setAsyncMode(asyncMode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getAutoToneDuration()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getAutoToneDuration();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAutoToneDuration(int autoToneDuration)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setAutoToneDuration(autoToneDuration);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getAutoToneFrequency()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getAutoToneFrequency();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAutoToneFrequency(int autoToneFrequency)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setAutoToneFrequency(autoToneFrequency);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCharacterSet()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCharacterSet();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getCharacterSetList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCharacterSetList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getClocks()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getClocks();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCurrentUnitID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCurrentUnitID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setCurrentUnitID(int currentUnitID)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setCurrentUnitID(currentUnitID);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDataCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getDataCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getDataEventEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getDataEventEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDataEventEnabled(boolean dataEventEnabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setDataEventEnabled(dataEventEnabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getErrorString()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getErrorString();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getErrorUnits()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getErrorUnits();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getEventString()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getEventString();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getEventType()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getEventType();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setEventType(int eventType)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setEventType(eventType);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getEventUnitID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getEventUnitID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getEventUnits()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getEventUnits();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getOutputID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getOutputID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getSystemClocks()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getSystemClocks();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getSystemVideoSaveBuffers()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getSystemVideoSaveBuffers();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getTimeout()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getTimeout();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setTimeout(int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setTimeout(timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getUnitsOnline()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getUnitsOnline();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getVideoDataCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getVideoDataCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getVideoMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getVideoMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setVideoMode(int videoMode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setVideoMode(videoMode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public String getVideoModesList()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getVideoModesList();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getVideoSaveBuffers()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getVideoSaveBuffers();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getMapCharacterSet()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.7.0
+    if(serviceVersion < deviceVersion17)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.7.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service17.getMapCharacterSet();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setMapCharacterSet(boolean mapCharacterSet)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.7.0
+    if(serviceVersion < deviceVersion17)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.7.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service17.setMapCharacterSet(mapCharacterSet);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void clearInput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.clearInput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearOutput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.clearOutput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearVideo(int units, int attribute)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.clearVideo(units, attribute);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearVideoRegion(int units, int row, int column, int height, int width, int attribute)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.clearVideoRegion(units, row, column, height, width, attribute);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void controlClock(int units, int function, int clockId, int hour, int min, int sec, int row, int column, int attribute, int mode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.controlClock(units, function, clockId, hour, min, sec, row, column, attribute, mode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void controlCursor(int units, int function)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.controlCursor(units, function);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void copyVideoRegion(int units, int row, int column, int height, int width, int targetRow, int targetColumn)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.copyVideoRegion(units, row, column, height, width, targetRow, targetColumn);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void displayData(int units, int row, int column, int attribute, String data)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.displayData(units, row, column, attribute, data);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void drawBox(int units, int row, int column, int height, int width, int attribute, int borderType)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.drawBox(units, row, column, height, width, attribute, borderType);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void freeVideoRegion(int units, int bufferId)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.freeVideoRegion(units, bufferId);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetVideo(int units)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.resetVideo(units);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void restoreVideoRegion(int units, int targetRow, int targetColumn, int bufferId)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.restoreVideoRegion(units, targetRow, targetColumn, bufferId);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void saveVideoRegion(int units, int row, int column, int height, int width, int bufferId)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.saveVideoRegion(units, row, column, height, width, bufferId);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void selectChararacterSet(int units, int characterSet)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.selectChararacterSet(units, characterSet);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setCursor(int units, int row, int column)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setCursor(units, row, column);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void transactionDisplay(int units, int function)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.transactionDisplay(units, function);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateVideoRegionAttribute(int units, int function, int row, int column, int height, int width, int attribute)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.updateVideoRegionAttribute(units, function, row, column, height, width, attribute);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void videoSound(int units, int frequency, int duration, int numberOfCycles, int interSoundWait)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.videoSound(units, frequency, duration, numberOfCycles, interSoundWait);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new RemoteOrderDisplayCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service13 = null;
+      service14 = null;
+      service15 = null;
+      service16 = null;
+      service17 = null;
+      service18 = null;
+      service19 = null;
+      service110 = null;
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion13)
+      {
+        try
+        {
+          service13 = (RemoteOrderDisplayService13)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement RemoteOrderDisplayService13 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion14)
+      {
+        try
+        {
+          service14 = (RemoteOrderDisplayService14)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement RemoteOrderDisplayService14 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion15)
+      {
+        try
+        {
+          service15 = (RemoteOrderDisplayService15)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement RemoteOrderDisplayService15 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion16)
+      {
+        try
+        {
+          service16 = (RemoteOrderDisplayService16)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement RemoteOrderDisplayService16 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion17)
+      {
+        try
+        {
+          service17 = (RemoteOrderDisplayService17)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement RemoteOrderDisplayService17 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion18)
+      {
+        try
+        {
+          service18 = (RemoteOrderDisplayService18)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement RemoteOrderDisplayService18 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion19)
+      {
+        try
+        {
+          service19 = (RemoteOrderDisplayService19)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement RemoteOrderDisplayService19 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion110)
+      {
+        try
+        {
+          service110 = (RemoteOrderDisplayService110)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement RemoteOrderDisplayService110 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (RemoteOrderDisplayService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement RemoteOrderDisplayService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (RemoteOrderDisplayService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement RemoteOrderDisplayService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (RemoteOrderDisplayService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement RemoteOrderDisplayService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (RemoteOrderDisplayService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement RemoteOrderDisplayService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.addElement(l);
+    }
+  }
+
+  public void removeDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.removeElement(l);
+    }
+  }
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.addElement(l);
+    }
+  }
+
+  public void removeErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.removeElement(l);
+    }
+  }
+
+  public void addOutputCompleteListener(OutputCompleteListener l)
+  {
+    synchronized(outputCompleteListeners)
+    {
+      outputCompleteListeners.addElement(l);
+    }
+  }
+
+  public void removeOutputCompleteListener(OutputCompleteListener l)
+  {
+    synchronized(outputCompleteListeners)
+    {
+      outputCompleteListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class RemoteOrderDisplayCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)RemoteOrderDisplay.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+      synchronized(RemoteOrderDisplay.this.dataListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < dataListeners.size(); x++)
+        {
+          ((DataListener)dataListeners.elementAt(x)).dataOccurred(e);
+        }
+      }
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(RemoteOrderDisplay.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+      synchronized(RemoteOrderDisplay.this.errorListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < errorListeners.size(); x++)
+        {
+          ((ErrorListener)errorListeners.elementAt(x)).errorOccurred(e);
+        }
+      }
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+      synchronized(RemoteOrderDisplay.this.outputCompleteListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < outputCompleteListeners.size(); x++)
+        {
+          ((OutputCompleteListener)outputCompleteListeners.elementAt(x)).outputCompleteOccurred(e);
+        }
+      }
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(RemoteOrderDisplay.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplay.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplay.manifest.stub
new file mode 100644
index 0000000..4fb606b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplay.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/RemoteOrderDisplay.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayBeanInfo.java
new file mode 100644
index 0000000..f647209
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayBeanInfo.java
@@ -0,0 +1,122 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// RemoteOrderDisplayBeanInfo.java - Bean information for the JavaPOS RemoteOrderDisplay
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class RemoteOrderDisplayBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.RemoteOrderDisplay.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.RemoteOrderDisplay.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapSelectCharacterSet"),
+        makeProperty("CapTone"),
+        makeProperty("CapTouch"),
+        makeProperty("CapTransaction"),
+        makeProperty("CapMapCharacterSet"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapUpdateFirmware"),
+
+        // Properties
+        makeProperty("AsyncMode"),
+        makeProperty("AutoToneDuration"),
+        makeProperty("AutoToneFrequency"),
+        makeProperty("CharacterSet"),
+        makeProperty("CharacterSetList"),
+        makeProperty("Clocks"),
+        makeProperty("CurrentUnitID"),
+        makeProperty("DataCount"),
+        makeProperty("DataEventEnabled"),
+        makeProperty("ErrorString"),
+        makeProperty("ErrorUnits"),
+        makeProperty("EventString"),
+        makeProperty("EventType"),
+        makeProperty("EventUnitID"),
+        makeProperty("EventUnits"),
+        makeProperty("OutputID"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState"),
+        makeProperty("SystemClocks"),
+        makeProperty("SystemVideoSaveBuffers"),
+        makeProperty("Timeout"),
+        makeProperty("UnitsOnline"),
+        makeProperty("VideoDataCount"),
+        makeProperty("VideoMode"),
+        makeProperty("VideoModesList"),
+        makeProperty("VideoSaveBuffers"),
+        makeProperty("MapCharacterSet"),
+
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.RemoteOrderDisplay.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("Data"),
+        makeEvent("DirectIO"),
+        makeEvent("Error"),
+        makeEvent("OutputComplete"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayConst.java
new file mode 100644
index 0000000..147b6e7
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayConst.java
@@ -0,0 +1,189 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RemoteOrderDisplayConst
+//
+//   Remote Order Display constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 1998-Apr-20 JavaPOS Release 1.3                                 BS
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//   Added the following missing constants:
+//     ROD_CLK_SHORT
+//     ROD_CLK_NORMAL
+//     ROD_CLK_12_LONG
+//     ROD_CLK_24_LONG
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface RemoteOrderDisplayConst
+{
+    /////////////////////////////////////////////////////////////////////
+    // "CurrentUnitID" and "UnitsOnline" Properties
+    //  and "Units" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int ROD_UID_1  = 0x00000001;
+    public static final int ROD_UID_2  = 0x00000002;
+    public static final int ROD_UID_3  = 0x00000004;
+    public static final int ROD_UID_4  = 0x00000008;
+    public static final int ROD_UID_5  = 0x00000010;
+    public static final int ROD_UID_6  = 0x00000020;
+    public static final int ROD_UID_7  = 0x00000040;
+    public static final int ROD_UID_8  = 0x00000080;
+    public static final int ROD_UID_9  = 0x00000100;
+    public static final int ROD_UID_10 = 0x00000200;
+    public static final int ROD_UID_11 = 0x00000400;
+    public static final int ROD_UID_12 = 0x00000800;
+    public static final int ROD_UID_13 = 0x00001000;
+    public static final int ROD_UID_14 = 0x00002000;
+    public static final int ROD_UID_15 = 0x00004000;
+    public static final int ROD_UID_16 = 0x00008000;
+    public static final int ROD_UID_17 = 0x00010000;
+    public static final int ROD_UID_18 = 0x00020000;
+    public static final int ROD_UID_19 = 0x00040000;
+    public static final int ROD_UID_20 = 0x00080000;
+    public static final int ROD_UID_21 = 0x00100000;
+    public static final int ROD_UID_22 = 0x00200000;
+    public static final int ROD_UID_23 = 0x00400000;
+    public static final int ROD_UID_24 = 0x00800000;
+    public static final int ROD_UID_25 = 0x01000000;
+    public static final int ROD_UID_26 = 0x02000000;
+    public static final int ROD_UID_27 = 0x04000000;
+    public static final int ROD_UID_28 = 0x08000000;
+    public static final int ROD_UID_29 = 0x10000000;
+    public static final int ROD_UID_30 = 0x20000000;
+    public static final int ROD_UID_31 = 0x40000000;
+    public static final int ROD_UID_32 = 0x80000000;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // Broadcast Methods: "Attribute" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int ROD_ATTR_BLINK       = 0x80;
+
+    public static final int ROD_ATTR_BG_BLACK    = 0x00;
+    public static final int ROD_ATTR_BG_BLUE     = 0x10;
+    public static final int ROD_ATTR_BG_GREEN    = 0x20;
+    public static final int ROD_ATTR_BG_CYAN     = 0x30;
+    public static final int ROD_ATTR_BG_RED      = 0x40;
+    public static final int ROD_ATTR_BG_MAGENTA  = 0x50;
+    public static final int ROD_ATTR_BG_BROWN    = 0x60;
+    public static final int ROD_ATTR_BG_GRAY     = 0x70;
+
+    public static final int ROD_ATTR_INTENSITY   = 0x08;
+
+    public static final int ROD_ATTR_FG_BLACK    = 0x00;
+    public static final int ROD_ATTR_FG_BLUE     = 0x01;
+    public static final int ROD_ATTR_FG_GREEN    = 0x02;
+    public static final int ROD_ATTR_FG_CYAN     = 0x03;
+    public static final int ROD_ATTR_FG_RED      = 0x04;
+    public static final int ROD_ATTR_FG_MAGENTA  = 0x05;
+    public static final int ROD_ATTR_FG_BROWN    = 0x06;
+    public static final int ROD_ATTR_FG_GRAY     = 0x07;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "DrawBox" Method: "BorderType" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int ROD_BDR_SINGLE       = 1;
+    public static final int ROD_BDR_DOUBLE       = 2;
+    public static final int ROD_BDR_SOLID        = 3;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "ControlClock" Method: "Function" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int ROD_CLK_START        = 1;
+    public static final int ROD_CLK_PAUSE        = 2;
+    public static final int ROD_CLK_RESUME       = 3;
+    public static final int ROD_CLK_MOVE         = 4;
+    public static final int ROD_CLK_STOP         = 5;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "ControlClock" Method: "Mode" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int ROD_CLK_SHORT        = 1;
+    public static final int ROD_CLK_NORMAL       = 2;
+    public static final int ROD_CLK_12_LONG      = 3;
+    public static final int ROD_CLK_24_LONG      = 4;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "ControlCursor" Method: "Function" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int ROD_CRS_LINE         = 1;
+    public static final int ROD_CRS_LINE_BLINK   = 2;
+    public static final int ROD_CRS_BLOCK        = 3;
+    public static final int ROD_CRS_BLOCK_BLINK  = 4;
+    public static final int ROD_CRS_OFF          = 5;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "SelectCharacterSet" Method: "CharacterSet" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int ROD_CS_UNICODE       = 997;
+    public static final int ROD_CS_ASCII         = 998;
+    public static final int ROD_CS_ANSI          = 999;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "TransactionDisplay" Method: "Function" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int ROD_TD_TRANSACTION   = 11;
+    public static final int ROD_TD_NORMAL        = 12;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "UpdateVideoRegionAttribute" Method: "Function" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int ROD_UA_SET           = 1;
+    public static final int ROD_UA_INTENSITY_ON  = 2;
+    public static final int ROD_UA_INTENSITY_OFF = 3;
+    public static final int ROD_UA_REVERSE_ON    = 4;
+    public static final int ROD_UA_REVERSE_OFF   = 5;
+    public static final int ROD_UA_BLINK_ON      = 6;
+    public static final int ROD_UA_BLINK_OFF     = 7;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "EventTypes" Property and "DataEvent" Event: "Status" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int ROD_DE_TOUCH_UP      = 0x01;
+    public static final int ROD_DE_TOUCH_DOWN    = 0x02;
+    public static final int ROD_DE_TOUCH_MOVE    = 0x04;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "ResultCodeExtended" Property Constants for Remote Order Display
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int JPOS_EROD_BADCLK     = 1 + JposConst.JPOSERREXT; // ControlClock
+    public static final int JPOS_EROD_NOCLOCKS   = 2 + JposConst.JPOSERREXT; // ControlClock
+    public static final int JPOS_EROD_NOREGION   = 3 + JposConst.JPOSERREXT; // RestoreVideo
+                                                  //   Region
+    public static final int JPOS_EROD_NOBUFFERS  = 4 + JposConst.JPOSERREXT; // SaveVideoRegion
+    public static final int JPOS_EROD_NOROOM     = 5 + JposConst.JPOSERREXT; // SaveVideoRegion
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl110.java b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl110.java
new file mode 100644
index 0000000..4374a31
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl110.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RemoteOrderDisplayControl110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Remote Order Display for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface RemoteOrderDisplayControl110 extends RemoteOrderDisplayControl19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl111.java
new file mode 100644
index 0000000..9f91325
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RemoteOrderDisplayControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Remote Order Display for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface RemoteOrderDisplayControl111 extends RemoteOrderDisplayControl110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl112.java
new file mode 100644
index 0000000..4fec9cf
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RemoteOrderDisplayControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Remote Order Display for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface RemoteOrderDisplayControl112 extends RemoteOrderDisplayControl111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl113.java
new file mode 100644
index 0000000..d068a73
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RemoteOrderDisplayControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Remote Order Display for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface RemoteOrderDisplayControl113 extends RemoteOrderDisplayControl112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl114.java
new file mode 100644
index 0000000..2b71e8f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RemoteOrderDisplayControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Remote Order Display for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface RemoteOrderDisplayControl114 extends RemoteOrderDisplayControl113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl13.java b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl13.java
new file mode 100644
index 0000000..f3b8ac1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl13.java
@@ -0,0 +1,128 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RemoteOrderDisplayControl13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Remote Order Display for release
+//   1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface RemoteOrderDisplayControl13 extends BaseControl
+{
+    // Capabilities
+    public int     getCapPowerReporting() throws JposException;
+    public boolean getCapSelectCharacterSet() throws JposException;
+    public boolean getCapTone() throws JposException;
+    public boolean getCapTouch() throws JposException;
+    public boolean getCapTransaction() throws JposException;
+
+    // Properties
+    public boolean getAsyncMode() throws JposException;
+    public void    setAsyncMode(boolean asyncMode) throws JposException;
+    public int     getAutoToneDuration() throws JposException;
+    public void    setAutoToneDuration(int autoToneDuration)
+                       throws JposException;
+    public int     getAutoToneFrequency() throws JposException;
+    public void    setAutoToneFrequency(int autoToneFrequency)
+                       throws JposException;
+    public int     getCharacterSet() throws JposException;
+    public String  getCharacterSetList() throws JposException;
+    public int     getClocks() throws JposException;
+    public int     getCurrentUnitID() throws JposException;
+    public void    setCurrentUnitID(int currentUnitID) throws JposException;
+    public int     getDataCount() throws JposException;
+    public boolean getDataEventEnabled() throws JposException;
+    public void    setDataEventEnabled(boolean dataEventEnabled)
+                       throws JposException;
+    public String  getErrorString() throws JposException;
+    public int     getErrorUnits() throws JposException;
+    public String  getEventString() throws JposException;
+    public int     getEventType() throws JposException;
+    public void    setEventType(int eventType) throws JposException;
+    public int     getEventUnitID() throws JposException;
+    public int     getEventUnits() throws JposException;
+    public int     getOutputID() throws JposException;
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+    public int     getSystemClocks() throws JposException;
+    public int     getSystemVideoSaveBuffers() throws JposException;
+    public int     getTimeout() throws JposException;
+    public void    setTimeout(int timeout) throws JposException;
+    public int     getUnitsOnline() throws JposException;
+    public int     getVideoDataCount() throws JposException;
+    public int     getVideoMode() throws JposException;
+    public void    setVideoMode(int videoMode) throws JposException;
+    public String  getVideoModesList() throws JposException;
+    public int     getVideoSaveBuffers() throws JposException;
+
+    // Methods
+    public void    clearInput() throws JposException;
+    public void    clearOutput() throws JposException;
+    public void    clearVideo(int units, int attribute) throws JposException;
+    public void    clearVideoRegion(int units, int row, int column, int height,
+                       int width, int attribute) throws JposException;
+    public void    controlClock(int units, int function, int clockId, int hour,
+                       int min, int sec, int row, int column, int attribute,
+                       int mode) throws JposException;
+    public void    controlCursor(int units, int function) throws JposException;
+    public void    copyVideoRegion(int units, int row, int column, int height,
+                       int width, int targetRow, int targetColumn)
+                       throws JposException;
+    public void    displayData(int units, int row, int column, int attribute,
+                       String data) throws JposException;
+    public void    drawBox(int units, int row, int column, int height,
+                       int width, int attribute, int borderType)
+                       throws JposException;
+    public void    freeVideoRegion(int units, int bufferId)
+                       throws JposException;
+    public void    resetVideo(int units) throws JposException;
+    public void    restoreVideoRegion(int units, int targetRow,
+                       int targetColumn, int bufferId) throws JposException;
+    public void    saveVideoRegion(int units, int row, int column,
+                       int height, int width, int bufferId)
+                       throws JposException;
+    public void    selectChararacterSet(int units, int characterSet)
+                       throws JposException;
+    public void    setCursor(int units, int row, int column)
+                       throws JposException;
+    public void    transactionDisplay(int units, int function)
+                       throws JposException;
+    public void    updateVideoRegionAttribute(int units, int function, int row,
+                       int column, int height, int width, int attribute)
+                       throws JposException;
+    public void    videoSound(int units, int frequency, int duration,
+                       int numberOfCycles, int interSoundWait)
+                       throws JposException;
+
+    // Event listener methods
+    public void    addDataListener(DataListener l);
+    public void    removeDataListener(DataListener l);
+    public void    addDirectIOListener(DirectIOListener l);
+    public void    removeDirectIOListener(DirectIOListener l);
+    public void    addErrorListener(ErrorListener l);
+    public void    removeErrorListener(ErrorListener l);
+    public void    addOutputCompleteListener(OutputCompleteListener l);
+    public void    removeOutputCompleteListener(OutputCompleteListener l);
+    public void    addStatusUpdateListener(StatusUpdateListener l);
+    public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl14.java b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl14.java
new file mode 100644
index 0000000..5eb07e1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RemoteOrderDisplayControl14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Remote Order Display for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface RemoteOrderDisplayControl14 extends RemoteOrderDisplayControl13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl15.java b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl15.java
new file mode 100644
index 0000000..eaf5786
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl15.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RemoteOrderDisplayControl15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Remote Order Display for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 00-04-17 JavaPOS Release 1.5                                  BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface RemoteOrderDisplayControl15 extends RemoteOrderDisplayControl14
+{
+  // Nothing new added for release 1.5
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl16.java b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl16.java
new file mode 100644
index 0000000..cc8ac2d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl16.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RemoteOrderDisplayControl16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Remote Order Display for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-04-18 JavaPOS Release 1.6                                  BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface RemoteOrderDisplayControl16 extends RemoteOrderDisplayControl15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl17.java b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl17.java
new file mode 100644
index 0000000..58ef6bc
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl17.java
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RemoteOrderDisplayControl17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Remote Order Display for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface RemoteOrderDisplayControl17 extends RemoteOrderDisplayControl16
+{
+  // Capabilities
+  public boolean getCapMapCharacterSet() throws JposException;
+
+  // Properties
+  public boolean getMapCharacterSet() throws JposException;
+  public void    setMapCharacterSet(boolean mapCharacterSet)
+                   throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl18.java b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl18.java
new file mode 100644
index 0000000..511dbed
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl18.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RemoteOrderDisplayControl18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Remote Order Display for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 03-Jun-2003 JavaPOS Release 1.8                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface RemoteOrderDisplayControl18 extends RemoteOrderDisplayControl17
+{
+	// Capabilities
+	public boolean getCapStatisticsReporting() throws JposException;
+	public boolean getCapUpdateStatistics() throws JposException;
+
+	// Methods
+	public void    resetStatistics(String statisticsBuffer)
+										 throws JposException;
+	public void    retrieveStatistics(String[] statisticsBuffer)
+										 throws JposException;
+	public void    updateStatistics(String statisticsBuffer)
+										 throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl19.java b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl19.java
new file mode 100644
index 0000000..8d4b3b6
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/RemoteOrderDisplayControl19.java
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RemoteOrderDisplayControl19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Remote Order Display for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface RemoteOrderDisplayControl19 extends RemoteOrderDisplayControl18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/Scale.java b/org.eclipse.osbp.fork.jpos/src/jpos/Scale.java
new file mode 100644
index 0000000..9cbdbe6
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/Scale.java
@@ -0,0 +1,2249 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// Scale.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class Scale
+  extends BaseJposControl
+  implements ScaleControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected ScaleService12 service12;
+  protected ScaleService13 service13;
+  protected ScaleService14 service14;
+  protected ScaleService15 service15;
+  protected ScaleService16 service16;
+  protected ScaleService17 service17;
+  protected ScaleService18 service18;
+  protected ScaleService19 service19;
+  protected ScaleService110 service110;
+  protected ScaleService111 service111;
+  protected ScaleService112 service112;
+  protected ScaleService113 service113;
+  protected ScaleService114 service114;
+  protected Vector directIOListeners;
+  protected Vector dataListeners;
+  protected Vector errorListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public Scale()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS Scale Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service12 = null;
+    //service13 = null;
+    //service14 = null;
+    //service15 = null;
+    //service16 = null;
+    //service17 = null;
+    //service18 = null;
+    //service19 = null;
+    //service110 = null;
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    directIOListeners = new Vector();
+    dataListeners = new Vector();
+    errorListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapDisplay()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapDisplay();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapDisplayText()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapDisplayText();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapPriceCalculating()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapPriceCalculating();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapTareWeight()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapTareWeight();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapZeroScale()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapZeroScale();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatusUpdate()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapStatusUpdate();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapFreezeValue()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.14.0
+    if(serviceVersion < deviceVersion114)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.14.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service114.getCapFreezeValue();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapReadLiveWeightWithTare()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.14.0
+    if(serviceVersion < deviceVersion114)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.14.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service114.getCapReadLiveWeightWithTare();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSetPriceCalculationMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.14.0
+    if(serviceVersion < deviceVersion114)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.14.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service114.getCapSetPriceCalculationMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSetUnitPriceWithWeightUnit()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.14.0
+    if(serviceVersion < deviceVersion114)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.14.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service114.getCapSetUnitPriceWithWeightUnit();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapSpecialTare()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.14.0
+    if(serviceVersion < deviceVersion114)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.14.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service114.getCapSpecialTare();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapTarePriority()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.14.0
+    if(serviceVersion < deviceVersion114)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.14.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service114.getCapTarePriority();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public int getMaximumWeight()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getMaximumWeight();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getWeightUnit()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getWeightUnit();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getAsyncMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getAsyncMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAsyncMode(boolean asyncMode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setAsyncMode(asyncMode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getAutoDisable()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getAutoDisable();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAutoDisable(boolean autoDisable)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setAutoDisable(autoDisable);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDataCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getDataCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getDataEventEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getDataEventEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDataEventEnabled(boolean dataEventEnabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setDataEventEnabled(dataEventEnabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getMaxDisplayTextChars()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getMaxDisplayTextChars();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public long getSalesPrice()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getSalesPrice();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getTareWeight()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getTareWeight();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setTareWeight(int tareWeight)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setTareWeight(tareWeight);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public long getUnitPrice()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getUnitPrice();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setUnitPrice(long unitPrice)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setUnitPrice(unitPrice);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getScaleLiveWeight()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getScaleLiveWeight();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getStatusNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getStatusNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setStatusNotify(int statusNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.setStatusNotify(statusNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getZeroValid()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.13.0
+    if(serviceVersion < deviceVersion113)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.13.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service113.getZeroValid();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setZeroValid(boolean zeroValid)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.13.0
+    if(serviceVersion < deviceVersion113)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.13.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service113.setZeroValid(zeroValid);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getMinimumWeight()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.14.0
+    if(serviceVersion < deviceVersion114)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.14.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service114.getMinimumWeight();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void readWeight(int[] weightData, int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.readWeight(weightData, timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearInput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.clearInput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void displayText(String data)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.displayText(data);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void zeroScale()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.zeroScale();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void doPriceCalculating(int[] weightValue, int[] tare, long[] unitPrice, long[] unitPriceX, int[] weightUnitX, int[] weightNumeratorX, int[] weightDenominatorX, long[] price, int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.14.0
+    if(serviceVersion < deviceVersion114)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.14.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service114.doPriceCalculating(weightValue, tare, unitPrice, unitPriceX, weightUnitX, weightNumeratorX, weightDenominatorX, price, timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void freezeValue(int item, boolean freeze)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.14.0
+    if(serviceVersion < deviceVersion114)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.14.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service114.freezeValue(item, freeze);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void readLiveWeightWithTare(int[] weightData, int[] tare, int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.14.0
+    if(serviceVersion < deviceVersion114)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.14.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service114.readLiveWeightWithTare(weightData, tare, timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPriceCalculationMode(int mode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.14.0
+    if(serviceVersion < deviceVersion114)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.14.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service114.setPriceCalculationMode(mode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setSpecialTare(int mode, int data)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.14.0
+    if(serviceVersion < deviceVersion114)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.14.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service114.setSpecialTare(mode, data);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setTarePrioity(int priority)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.14.0
+    if(serviceVersion < deviceVersion114)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.14.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service114.setTarePrioity(priority);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setUnitPriceWithWeightUnit(long unitPrice, int weightUnit, int weightNumerator, int weightDenominator)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.14.0
+    if(serviceVersion < deviceVersion114)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.14.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service114.setUnitPriceWithWeightUnit(unitPrice, weightUnit, weightNumerator, weightDenominator);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new ScaleCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service12 = null;
+      service13 = null;
+      service14 = null;
+      service15 = null;
+      service16 = null;
+      service17 = null;
+      service18 = null;
+      service19 = null;
+      service110 = null;
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion12)
+      {
+        try
+        {
+          service12 = (ScaleService12)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ScaleService12 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion13)
+      {
+        try
+        {
+          service13 = (ScaleService13)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ScaleService13 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion14)
+      {
+        try
+        {
+          service14 = (ScaleService14)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ScaleService14 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion15)
+      {
+        try
+        {
+          service15 = (ScaleService15)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ScaleService15 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion16)
+      {
+        try
+        {
+          service16 = (ScaleService16)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ScaleService16 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion17)
+      {
+        try
+        {
+          service17 = (ScaleService17)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ScaleService17 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion18)
+      {
+        try
+        {
+          service18 = (ScaleService18)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ScaleService18 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion19)
+      {
+        try
+        {
+          service19 = (ScaleService19)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ScaleService19 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion110)
+      {
+        try
+        {
+          service110 = (ScaleService110)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ScaleService110 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (ScaleService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ScaleService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (ScaleService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ScaleService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (ScaleService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ScaleService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (ScaleService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ScaleService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.addElement(l);
+    }
+  }
+
+  public void removeDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.removeElement(l);
+    }
+  }
+
+  public void addErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.addElement(l);
+    }
+  }
+
+  public void removeErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class ScaleCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)Scale.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+      synchronized(Scale.this.dataListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < dataListeners.size(); x++)
+        {
+          ((DataListener)dataListeners.elementAt(x)).dataOccurred(e);
+        }
+      }
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(Scale.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+      synchronized(Scale.this.errorListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < errorListeners.size(); x++)
+        {
+          ((ErrorListener)errorListeners.elementAt(x)).errorOccurred(e);
+        }
+      }
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(Scale.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/Scale.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/Scale.manifest.stub
new file mode 100644
index 0000000..57ec37a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/Scale.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/Scale.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScaleBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleBeanInfo.java
new file mode 100644
index 0000000..3370c48
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleBeanInfo.java
@@ -0,0 +1,116 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// ScaleBeanInfo.java - Bean information for the JavaPOS Scale
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class ScaleBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.Scale.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.Scale.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapDisplay"),
+        makeProperty("CapDisplayText"),
+        makeProperty("CapPriceCalculating"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapTareWeight"),
+        makeProperty("CapZeroScale"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapStatusUpdate"),
+        makeProperty("CapUpdateFirmware"),
+        makeProperty("CapFreezeValue"),
+        makeProperty("CapReadLiveWeightWithTare"),
+        makeProperty("CapSetPriceCalculationMode"),
+        makeProperty("CapSetUnitPriceWithWeightUnit"),
+        makeProperty("CapSpecialTare"),
+        makeProperty("CapTarePriority"),
+
+        // Properties
+        makeProperty("MaximumWeight"),
+        makeProperty("WeightUnit"),
+        makeProperty("AsyncMode"),
+        makeProperty("AutoDisable"),
+        makeProperty("DataCount"),
+        makeProperty("DataEventEnabled"),
+        makeProperty("MaxDisplayTextChars"),
+        makeProperty("SalesPrice"),
+        makeProperty("TareWeight"),
+        makeProperty("UnitPrice"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState"),
+        makeProperty("ScaleLiveWeight"),
+        makeProperty("StatusNotify"),
+        makeProperty("ZeroValid"),
+        makeProperty("MinimumWeight")
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.Scale.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("Data"),
+        makeEvent("DirectIO"),
+        makeEvent("Error"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScaleConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleConst.java
new file mode 100644
index 0000000..cf02636
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleConst.java
@@ -0,0 +1,144 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleConst
+//
+//   Scale constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 1998-Feb-18 JavaPOS Release 1.2                                 BS
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//   Added the following constants:
+//     SCAL_SN_DISABLED
+//     SCAL_SN_ENABLED
+//     JPOS_ESCAL_UNDER_ZERO
+//     JPOS_ESCAL_SAME_WEIGHT
+//     SCL_SUE_STABLE_WEIGHT
+//     SCL_SUE_WEIGHT_UNSTABLE
+//     SCL_SUE_WEIGHT_ZERO
+//     SCL_SUE_WEIGHT_OVERWEIGHT
+//     SCL_SUE_NOT_READY
+//     SCL_SUE_WEIGHT_UNDER_ZERO
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//   Added duplicate SUE constants to match names used in the spec.
+//     (i.e. SCAL_SUE_STABLE_WEIGHT instead of SCL_SUE_STABLE_WEIGHT)
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//   Added the following constants:
+//     SCAL_SFR_MANUAL_TARE
+//     SCAL_SFR_WEIGHTED_TARE
+//     SCAL_SFR_PERCENT_TARE
+//     SCAL_SFR_UNITPRICE
+//     SCAL_PCM_PRICE_LABELING
+//     SCAL_PCM_SELF_SERVICE
+//     SCAL_PCM_OPERATOR
+//     SCAL_SST_DEFAULT
+//     SCAL_SST_MANUAL
+//     SCAL_SST_PERCENT
+//     SCAL_SST_WEIGHTED
+//     SCAL_STP_FIRST
+//     SCAL_STP_NONE
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface ScaleConst
+{
+    //###################################################################
+    //#### Scale Constants
+    //###################################################################
+
+    /////////////////////////////////////////////////////////////////////
+    // "WeightUnit" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int SCAL_WU_GRAM         = 1;
+    public static final int SCAL_WU_KILOGRAM     = 2;
+    public static final int SCAL_WU_OUNCE        = 3;
+    public static final int SCAL_WU_POUND        = 4;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "StatusNotify" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int SCAL_SN_DISABLED = 1;
+    public static final int SCAL_SN_ENABLED  = 2;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "freezeValue" Method "item" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int SCAL_SFR_MANUAL_TARE   = 0x00000001; // Added in 1.14
+    public static final int SCAL_SFR_WEIGHTED_TARE = 0x00000002; // Added in 1.14
+    public static final int SCAL_SFR_PERCENT_TARE  = 0x00000004; // Added in 1.14
+    public static final int SCAL_SFR_UNITPRICE     = 0x00000008; // Added in 1.14
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "setPriceCalculationMode" Method "mode" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int SCAL_PCM_PRICE_LABELING = 1; // Added in 1.14
+    public static final int SCAL_PCM_SELF_SERVICE   = 2; // Added in 1.14
+    public static final int SCAL_PCM_OPERATOR       = 3; // Added in 1.14
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "setSpecialTare" Method "mode" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int SCAL_SST_DEFAULT  = 1; // Added in 1.14
+    public static final int SCAL_SST_MANUAL   = 2; // Added in 1.14
+    public static final int SCAL_SST_PERCENT  = 3; // Added in 1.14
+    public static final int SCAL_SST_WEIGHTED = 4; // Added in 1.14
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "setSpecialTare" Method "priority" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int SCAL_STP_FIRST = 1; // Added in 1.14
+    public static final int SCAL_STP_NONE  = 2; // Added in 1.14
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "StatusUpdateEvent" "Status" Parameter Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int SCL_SUE_STABLE_WEIGHT     = 11;
+    public static final int SCL_SUE_WEIGHT_UNSTABLE   = 12;
+    public static final int SCL_SUE_WEIGHT_ZERO       = 13;
+    public static final int SCL_SUE_WEIGHT_OVERWEIGHT = 14;
+    public static final int SCL_SUE_NOT_READY         = 15;
+    public static final int SCL_SUE_WEIGHT_UNDER_ZERO = 16;
+
+    // 1.10 Correction: new names that actually match the UnifiedPOS
+    //   specification
+    public static final int SCAL_SUE_STABLE_WEIGHT     = 11;
+    public static final int SCAL_SUE_WEIGHT_UNSTABLE   = 12;
+    public static final int SCAL_SUE_WEIGHT_ZERO       = 13;
+    public static final int SCAL_SUE_WEIGHT_OVERWEIGHT = 14;
+    public static final int SCAL_SUE_NOT_READY         = 15;
+    public static final int SCAL_SUE_WEIGHT_UNDER_ZERO = 16;
+
+
+    /////////////////////////////////////////////////////////////////////
+    // "ResultCodeExtended" Property Constants for Scale
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int JPOS_ESCAL_OVERWEIGHT  = 1 + JposConst.JPOSERREXT; // ReadWeight
+    public static final int JPOS_ESCAL_UNDER_ZERO  = 2 + JposConst.JPOSERREXT; // ReadWeight
+    public static final int JPOS_ESCAL_SAME_WEIGHT = 3 + JposConst.JPOSERREXT; // ReadWeight
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl110.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl110.java
new file mode 100644
index 0000000..64b4c5d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl110.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleControl110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scale for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ScaleControl110 extends ScaleControl19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl111.java
new file mode 100644
index 0000000..cd1f934
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scale for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ScaleControl111 extends ScaleControl110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl112.java
new file mode 100644
index 0000000..a1ded82
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scale for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ScaleControl112 extends ScaleControl111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl113.java
new file mode 100644
index 0000000..66e4d91
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl113.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scale for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ScaleControl113 extends ScaleControl112
+{
+  // Properties
+  public boolean getZeroValid() throws JposException;
+  public void    setZeroValid(boolean zeroValid) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl114.java
new file mode 100644
index 0000000..2026411
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl114.java
@@ -0,0 +1,64 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Scale for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ScaleControl114 extends ScaleControl113
+{
+  // Capabilities
+  public boolean getCapFreezeValue() throws JposException;
+  public boolean getCapReadLiveWeightWithTare() throws JposException;
+  public boolean getCapSetPriceCalculationMode() throws JposException;
+  public boolean getCapSetUnitPriceWithWeightUnit() throws JposException;
+  public boolean getCapSpecialTare() throws JposException;
+  public boolean getCapTarePriority() throws JposException;
+
+  // Properties
+  public int     getMinimumWeight() throws JposException;
+
+  // Methods
+  public void    doPriceCalculating(int[]  weightValue,
+                                    int[]  tare,
+                                    long[] unitPrice,
+                                    long[] unitPriceX,
+                                    int[]  weightUnitX,
+                                    int[]  weightNumeratorX,
+                                    int[]  weightDenominatorX,
+                                    long[] price,
+                                    int    timeout) throws JposException;
+  public void    freezeValue(int     item,
+                             boolean freeze) throws JposException;
+  public void    readLiveWeightWithTare(int[] weightData,
+                                        int[] tare,
+                                        int   timeout) throws JposException;
+  public void    setPriceCalculationMode(int mode) throws JposException;
+  public void    setSpecialTare(int mode,
+                                int data) throws JposException;
+  public void    setTarePrioity(int priority) throws JposException;
+  public void    setUnitPriceWithWeightUnit(long unitPrice,
+                                            int  weightUnit,
+                                            int  weightNumerator,
+                                            int  weightDenominator) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl12.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl12.java
new file mode 100644
index 0000000..6fb7afe
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl12.java
@@ -0,0 +1,44 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleControl12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to Scale for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ScaleControl12 extends BaseControl
+{
+    // Capabilities
+    public boolean getCapDisplay() throws JposException;
+
+    // Properties
+    public int     getMaximumWeight() throws JposException;
+    public int     getWeightUnit() throws JposException;
+
+    // Methods
+    public void    readWeight(int[] weightData, int timeout)
+                       throws JposException;
+
+    // Event listener methods
+    public void    addDirectIOListener(DirectIOListener l);
+    public void    removeDirectIOListener(DirectIOListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl13.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl13.java
new file mode 100644
index 0000000..b242e37
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl13.java
@@ -0,0 +1,67 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleControl13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scale for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ScaleControl13 extends ScaleControl12
+{
+    // Capabilities
+    public boolean getCapDisplayText() throws JposException;
+    public boolean getCapPriceCalculating() throws JposException;
+    public int     getCapPowerReporting() throws JposException;
+    public boolean getCapTareWeight() throws JposException;
+    public boolean getCapZeroScale()  throws JposException;
+
+    // Properties
+    public boolean getAsyncMode() throws JposException;
+    public void    setAsyncMode(boolean asyncMode) throws JposException;
+    public boolean getAutoDisable() throws JposException;
+    public void    setAutoDisable(boolean autoDisable) throws JposException;
+    public int     getDataCount() throws JposException;
+    public boolean getDataEventEnabled() throws JposException;
+    public void    setDataEventEnabled(boolean dataEventEnabled) throws JposException;
+    public int     getMaxDisplayTextChars() throws JposException;
+    public long    getSalesPrice() throws JposException;
+    public int     getTareWeight() throws JposException;
+    public void    setTareWeight(int tareWeight) throws JposException;
+    public long    getUnitPrice() throws JposException;
+    public void    setUnitPrice(long unitPrice) throws JposException;
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+
+    // Methods
+    public void    clearInput() throws JposException;
+    public void    displayText(String data) throws JposException;
+    public void    zeroScale() throws JposException;
+
+    // Event listener methods
+    public void    addDataListener(DataListener l);
+    public void    removeDataListener(DataListener l);
+    public void    addErrorListener(ErrorListener l);
+    public void    removeErrorListener(ErrorListener l);
+    public void    addStatusUpdateListener(StatusUpdateListener l);
+    public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl14.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl14.java
new file mode 100644
index 0000000..94c3d57
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleControl14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scale for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ScaleControl14 extends ScaleControl13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl15.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl15.java
new file mode 100644
index 0000000..1e48891
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl15.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleControl15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scale for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 00-04-17 JavaPOS Release 1.5                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ScaleControl15 extends ScaleControl14
+{
+  // Nothing new added for release 1.5
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl16.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl16.java
new file mode 100644
index 0000000..7c5f3cc
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl16.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleControl16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scale for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-04-18 JavaPOS Release 1.6                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ScaleControl16 extends ScaleControl15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl17.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl17.java
new file mode 100644
index 0000000..58a9e3f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl17.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleControl17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scale for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ScaleControl17 extends ScaleControl16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl18.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl18.java
new file mode 100644
index 0000000..bd10414
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl18.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleControl18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scale for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ScaleControl18 extends ScaleControl17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl19.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl19.java
new file mode 100644
index 0000000..b8a810d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScaleControl19.java
@@ -0,0 +1,45 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleControl19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scale for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ScaleControl19 extends ScaleControl18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapStatusUpdate() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Properties
+  public int     getScaleLiveWeight() throws JposException;
+  public int     getStatusNotify() throws JposException;
+  public void    setStatusNotify(int statusNotify) throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/Scanner.java b/org.eclipse.osbp.fork.jpos/src/jpos/Scanner.java
new file mode 100644
index 0000000..8396882
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/Scanner.java
@@ -0,0 +1,1176 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// Scanner.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class Scanner
+  extends BaseJposControl
+  implements ScannerControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected ScannerService12 service12;
+  protected ScannerService13 service13;
+  protected ScannerService14 service14;
+  protected ScannerService15 service15;
+  protected ScannerService16 service16;
+  protected ScannerService17 service17;
+  protected ScannerService18 service18;
+  protected ScannerService19 service19;
+  protected ScannerService110 service110;
+  protected ScannerService111 service111;
+  protected ScannerService112 service112;
+  protected ScannerService113 service113;
+  protected ScannerService114 service114;
+  protected Vector dataListeners;
+  protected Vector directIOListeners;
+  protected Vector errorListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public Scanner()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS Scanner Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service12 = null;
+    //service13 = null;
+    //service14 = null;
+    //service15 = null;
+    //service16 = null;
+    //service17 = null;
+    //service18 = null;
+    //service19 = null;
+    //service110 = null;
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    dataListeners = new Vector();
+    directIOListeners = new Vector();
+    errorListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public boolean getAutoDisable()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getAutoDisable();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAutoDisable(boolean autoDisable)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setAutoDisable(autoDisable);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDataCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getDataCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getDataEventEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getDataEventEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDataEventEnabled(boolean dataEventEnabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setDataEventEnabled(dataEventEnabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getDecodeData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getDecodeData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDecodeData(boolean decodeData)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setDecodeData(decodeData);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public byte[] getScanData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getScanData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public byte[] getScanDataLabel()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getScanDataLabel();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getScanDataType()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getScanDataType();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void clearInput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.clearInput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearInputProperties()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.10.0
+    if(serviceVersion < deviceVersion110)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.10.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.clearInputProperties();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new ScannerCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service12 = null;
+      service13 = null;
+      service14 = null;
+      service15 = null;
+      service16 = null;
+      service17 = null;
+      service18 = null;
+      service19 = null;
+      service110 = null;
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion12)
+      {
+        try
+        {
+          service12 = (ScannerService12)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ScannerService12 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion13)
+      {
+        try
+        {
+          service13 = (ScannerService13)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ScannerService13 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion14)
+      {
+        try
+        {
+          service14 = (ScannerService14)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ScannerService14 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion15)
+      {
+        try
+        {
+          service15 = (ScannerService15)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ScannerService15 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion16)
+      {
+        try
+        {
+          service16 = (ScannerService16)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ScannerService16 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion17)
+      {
+        try
+        {
+          service17 = (ScannerService17)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ScannerService17 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion18)
+      {
+        try
+        {
+          service18 = (ScannerService18)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ScannerService18 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion19)
+      {
+        try
+        {
+          service19 = (ScannerService19)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ScannerService19 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion110)
+      {
+        try
+        {
+          service110 = (ScannerService110)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ScannerService110 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (ScannerService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ScannerService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (ScannerService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ScannerService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (ScannerService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ScannerService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (ScannerService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ScannerService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.addElement(l);
+    }
+  }
+
+  public void removeDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.removeElement(l);
+    }
+  }
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.addElement(l);
+    }
+  }
+
+  public void removeErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class ScannerCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)Scanner.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+      synchronized(Scanner.this.dataListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < dataListeners.size(); x++)
+        {
+          ((DataListener)dataListeners.elementAt(x)).dataOccurred(e);
+        }
+      }
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(Scanner.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+      synchronized(Scanner.this.errorListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < errorListeners.size(); x++)
+        {
+          ((ErrorListener)errorListeners.elementAt(x)).errorOccurred(e);
+        }
+      }
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(Scanner.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/Scanner.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/Scanner.manifest.stub
new file mode 100644
index 0000000..2641fa1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/Scanner.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/Scanner.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScannerBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerBeanInfo.java
new file mode 100644
index 0000000..7d047db
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerBeanInfo.java
@@ -0,0 +1,97 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// ScannerBeanInfo.java - Bean information for the JavaPOS Scanner
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class ScannerBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.Scanner.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.Scanner.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapUpdateFirmware"),
+
+        // Properties
+        makeProperty("AutoDisable"),
+        makeProperty("DataCount"),
+        makeProperty("DataEventEnabled"),
+        makeProperty("DecodeData"),
+        makeProperty("ScanData"),
+        makeProperty("ScanDataLabel"),
+        makeProperty("ScanDataType"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState")
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.Scanner.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("Data"),
+        makeEvent("DirectIO"),
+        makeEvent("Error"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScannerConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerConst.java
new file mode 100644
index 0000000..4f45dec
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerConst.java
@@ -0,0 +1,198 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerConst
+//
+//   Scanner constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 1998-Feb-18 JavaPOS Release 1.2                                 BS
+// 2003-Jun-03 JavaPOS Release 1.8                                 BS
+//   Added new ScanDataType constants.
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//   Added new ScanDataType constants:
+//       SCAN_SDT_DATAMATRIX
+//       SCAN_SDT_QRCODE
+//       SCAN_SDT_UQRCODE
+//       SCAN_SDT_AZTEC
+//       SCAN_SDT_UPDF417
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//   Added new ScanDataType constants:
+//       SCAN_SDT_GS1DATABAR
+//       SCAN_SDT_GS1DATABAR_E
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//   Added new ScanDataType constants:
+//       SCAN_SDT_ITF_CK
+//       SCAN_SDT_GS1DATABAR_TYPE2
+//       SCAN_SDT_AMES
+//       SCAN_SDT_TFMAT
+//       SCAN_SDT_Code39_CK
+//       SCAN_SDT_Code32
+//       SCAN_SDT_CodeCIP
+//       SCAN_SDT_TRIOPTIC39
+//       SCAN_SDT_ISBT128
+//       SCAN_SDT_Code11
+//       SCAN_SDT_MSI
+//       SCAN_SDT_PLESSEY
+//       SCAN_SDT_TELEPEN
+//       SCAN_SDT_TLC39
+//       SCAN_SDT_GS1DATAMATRIX
+//       SCAN_SDT_GS1QRCODE
+//       SCAN_SDT_Code49
+//       SCAN_SDT_Code16k
+//       SCAN_SDT_CodablockA
+//       SCAN_SDT_CodablockF
+//       SCAN_SDT_Codablock256
+//       SCAN_SDT_HANXIN
+//       SCAN_SDT_AusPost
+//       SCAN_SDT_CanPost
+//       SCAN_SDT_ChinaPost
+//       SCAN_SDT_DutchKix
+//       SCAN_SDT_InfoMail
+//       SCAN_SDT_JapanPost
+//       SCAN_SDT_KoreanPost
+//       SCAN_SDT_SwedenPost
+//       SCAN_SDT_UkPost
+//       SCAN_SDT_UsIntelligent
+//       SCAN_SDT_UsPlanet
+//       SCAN_SDT_PostNet
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface ScannerConst
+{
+    //###################################################################
+    //#### Scanner Constants
+    //###################################################################
+
+    /////////////////////////////////////////////////////////////////////
+    // "ScanDataType" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    // One dimensional symbologies
+    public static final int SCAN_SDT_UPCA        = 101;  // Digits
+    public static final int SCAN_SDT_UPCE        = 102;  // Digits
+    public static final int SCAN_SDT_JAN8        = 103;  // = EAN 8
+    public static final int SCAN_SDT_EAN8        = 103;  // = JAN 8
+    public static final int SCAN_SDT_JAN13       = 104;  // = EAN 13
+    public static final int SCAN_SDT_EAN13       = 104;  // = JAN 13
+    public static final int SCAN_SDT_TF          = 105;  // (Discrete 2 of 5)
+                                                         //   Digits
+    public static final int SCAN_SDT_ITF         = 106;  // (Interleaved 2 of 5)
+                                                         //   Digits
+    public static final int SCAN_SDT_Codabar     = 107;  // Digits, -, $, :, /, .,
+                                                         //   +; 4 start/stop
+                                                         //   characters (a, b, c,
+                                                         //   d)
+    public static final int SCAN_SDT_Code39      = 108;  // Alpha, Digits, Space,
+                                                         //   -, ., $, /, +, %;
+                                                         //   start/stop (*)
+                                                         // Also has Full Ascii
+                                                         //   feature
+    public static final int SCAN_SDT_Code93      = 109;  // Same characters as
+                                                         //   Code 39
+    public static final int SCAN_SDT_Code128     = 110;  // 128 data characters
+    public static final int SCAN_SDT_UPCA_S      = 111;  // UPC-A with
+                                                         //   supplemental barcode
+    public static final int SCAN_SDT_UPCE_S      = 112;  // UPC-E with
+                                                         //   supplemental barcode
+    public static final int SCAN_SDT_UPCD1       = 113;  // UPC-D1
+    public static final int SCAN_SDT_UPCD2       = 114;  // UPC-D2
+    public static final int SCAN_SDT_UPCD3       = 115;  // UPC-D3
+    public static final int SCAN_SDT_UPCD4       = 116;  // UPC-D4
+    public static final int SCAN_SDT_UPCD5       = 117;  // UPC-D5
+    public static final int SCAN_SDT_EAN8_S      = 118;  // EAN 8 with
+                                                         //   supplemental barcode
+    public static final int SCAN_SDT_EAN13_S     = 119;  // EAN 13 with
+                                                         //   supplemental barcode
+    public static final int SCAN_SDT_EAN128      = 120;  // EAN 128
+    public static final int SCAN_SDT_OCRA        = 121;  // OCR "A"
+    public static final int SCAN_SDT_OCRB        = 122;  // OCR "B"
+
+    // One dimensional symbologies (Added in Release 1.8)
+    //        The following RSS constants deprecated in 1.12.
+    //        Instead use the GS1DATABAR constants below.
+    public static final int SCAN_SDT_RSS14       = 131;  // Reduced Space Symbology - 14 digit GTIN
+    public static final int SCAN_SDT_RSS_EXPANDED= 132;  // RSS - 14 digit GTIN plus additional fields
+
+    // One dimensional symbologies (added in Release 1.12)
+    public static final int SCAN_SDT_GS1DATABAR  = 131;  // GS1 DataBar Omnidirectional (normal or stacked)
+    public static final int SCAN_SDT_GS1DATABAR_E= 132;  // GS1 DataBar Expanded (normal or stacked)
+
+    // One dimensional symbologies (added in Release 1.14)
+    public static final int SCAN_SDT_ITF_CK           = 133;  // Interleaved 2 of 5 check digit verified and transmitted
+    public static final int SCAN_SDT_GS1DATABAR_TYPE2 = 134; // GS1 DataBar Limited
+    public static final int SCAN_SDT_AMES             = 135;  // Ames Code
+    public static final int SCAN_SDT_TFMAT            = 136;  // Matrix 2 of 5
+    public static final int SCAN_SDT_Code39_CK        = 137;  // Code 39 with check character verified and transmitted
+    public static final int SCAN_SDT_Code32           = 138;  // Code 39 with Mod 32 check character
+    public static final int SCAN_SDT_CodeCIP          = 139;  // Code 39 CIP
+    public static final int SCAN_SDT_TRIOPTIC39       = 140;  // Tri-Optic Code 39
+    public static final int SCAN_SDT_ISBT128          = 141;  // ISBT-128
+    public static final int SCAN_SDT_Code11           = 142;  // Code 11
+    public static final int SCAN_SDT_MSI              = 143;  // MSI Code
+    public static final int SCAN_SDT_PLESSEY          = 144;  // Plessey Code
+    public static final int SCAN_SDT_TELEPEN          = 145;  // Telepen
+
+    // Composite Symbologies (Added in Release 1.8)
+    public static final int SCAN_SDT_CCA         = 151;  // Composite Component A.
+    public static final int SCAN_SDT_CCB         = 152;  // Composite Component B.
+    public static final int SCAN_SDT_CCC         = 153;  // Composite Component C.
+
+    // Composite Symbologies (Added in Release 1.14)
+    public static final int SCAN_SDT_TLC39       = 154;  // TLC-39
+
+    // Two dimensional symbologies
+    public static final int SCAN_SDT_PDF417      = 201;
+    public static final int SCAN_SDT_MAXICODE    = 202;
+
+    // Two dimensional symbologies (Added in Release 1.11)
+    public static final int SCAN_SDT_DATAMATRIX  = 203;  // Data Matrix
+    public static final int SCAN_SDT_QRCODE      = 204;  // QR Code
+    public static final int SCAN_SDT_UQRCODE     = 205;  // Micro QR Code
+    public static final int SCAN_SDT_AZTEC       = 206;  // Aztec
+    public static final int SCAN_SDT_UPDF417     = 207;  // Micro PDF 417
+
+    // Two dimensional symbologies (Added in Release 1.14)
+    public static final int SCAN_SDT_GS1DATAMATRIX = 208;  // GS1 DataMatrix
+    public static final int SCAN_SDT_GS1QRCODE     = 209;  // GS1 QR Code
+    public static final int SCAN_SDT_Code49        = 210;  // Code 49
+    public static final int SCAN_SDT_Code16k       = 211;  // Code 16K
+    public static final int SCAN_SDT_CodablockA    = 212;  // Codablock A
+    public static final int SCAN_SDT_CodablockF    = 213;  // Codablock F
+    public static final int SCAN_SDT_Codablock256  = 214;  // Codablock 256
+    public static final int SCAN_SDT_HANXIN        = 215;  // Han Xin Code
+
+    // Postal Code Symbologies (Added in Release 1.14)
+    public static final int SCAN_SDT_AusPost       = 301;  // Australian Post
+    public static final int SCAN_SDT_CanPost       = 302;  // Canada Post
+    public static final int SCAN_SDT_ChinaPost     = 303;  // China Post
+    public static final int SCAN_SDT_DutchKix      = 304;  // Dutch Post
+    public static final int SCAN_SDT_InfoMail      = 305;  // InfoMail
+    public static final int SCAN_SDT_JapanPost     = 306;  // Japan Post
+    public static final int SCAN_SDT_KoreanPost    = 307;  // Korean Post
+    public static final int SCAN_SDT_SwedenPost    = 308;  // Sweden Post
+    public static final int SCAN_SDT_UkPost        = 309;  // UK Post BPO
+    public static final int SCAN_SDT_UsIntelligent = 310;  // US Intelligent Mail
+    public static final int SCAN_SDT_UsPlanet      = 311;  // US Planet Code
+    public static final int SCAN_SDT_PostNet       = 312;  // US Postnet
+
+    // Special cases
+    public static final int SCAN_SDT_OTHER       = 501;  // Start of Scanner-
+                                                         //   Specific bar code
+                                                         //   symbologies
+    public static final int SCAN_SDT_UNKNOWN     =   0;  // Cannot determine the
+                                                         //   barcode symbology.
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl110.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl110.java
new file mode 100644
index 0000000..90a6064
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl110.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerControl110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scanner for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ScannerControl110 extends ScannerControl19
+{
+  // Methods
+  public void    clearInputProperties()
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl111.java
new file mode 100644
index 0000000..033082f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scanner for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ScannerControl111 extends ScannerControl110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl112.java
new file mode 100644
index 0000000..8181aab
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scanner for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ScannerControl112 extends ScannerControl111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl113.java
new file mode 100644
index 0000000..0e409db
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scanner for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ScannerControl113 extends ScannerControl112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl114.java
new file mode 100644
index 0000000..578f951
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Scanner for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ScannerControl114 extends ScannerControl113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl12.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl12.java
new file mode 100644
index 0000000..bcbc761
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl12.java
@@ -0,0 +1,53 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerControl12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to Scanner for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ScannerControl12 extends BaseControl
+{
+    // Properties
+    public boolean getAutoDisable() throws JposException;
+    public void    setAutoDisable(boolean autoDisable) throws JposException;
+    public int     getDataCount() throws JposException;
+    public boolean getDataEventEnabled() throws JposException;
+    public void    setDataEventEnabled(boolean dataEventEnabled)
+                       throws JposException;
+    public boolean getDecodeData() throws JposException;
+    public void    setDecodeData(boolean decodeData) throws JposException;
+    public byte[]  getScanData() throws JposException;
+    public byte[]  getScanDataLabel() throws JposException;
+    public int     getScanDataType() throws JposException;
+
+    // Methods
+    public void    clearInput() throws JposException;
+
+    // Event listener methods
+    public void    addDataListener(DataListener l);
+    public void    removeDataListener(DataListener l);
+    public void    addDirectIOListener(DirectIOListener l);
+    public void    removeDirectIOListener(DirectIOListener l);
+    public void    addErrorListener(ErrorListener l);
+    public void    removeErrorListener(ErrorListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl13.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl13.java
new file mode 100644
index 0000000..656d8c7
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl13.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerControl13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scanner for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ScannerControl13 extends ScannerControl12
+{
+    // Capabilities
+  public int     getCapPowerReporting() throws JposException;
+
+    // Properties
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+
+    // Event listener methods
+    public void    addStatusUpdateListener(StatusUpdateListener l);
+    public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl14.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl14.java
new file mode 100644
index 0000000..5cefa2e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerControl14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scanner for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ScannerControl14 extends ScannerControl13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl15.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl15.java
new file mode 100644
index 0000000..2c818b0
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl15.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerControl15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scanner for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 00-04-17 JavaPOS Release 1.5                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ScannerControl15 extends ScannerControl14
+{
+  // Nothing new added for release 1.5
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl16.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl16.java
new file mode 100644
index 0000000..513d6ae
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl16.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerControl16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scanner for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-04-18 JavaPOS Release 1.6                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ScannerControl16 extends ScannerControl15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl17.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl17.java
new file mode 100644
index 0000000..cf1f5db
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl17.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerControl17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scanner for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ScannerControl17 extends ScannerControl16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl18.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl18.java
new file mode 100644
index 0000000..7406d4a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl18.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerControl18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scanner for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ScannerControl18 extends ScannerControl17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl19.java b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl19.java
new file mode 100644
index 0000000..65f2f29
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ScannerControl19.java
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerControl19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scanner for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ScannerControl19 extends ScannerControl18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCapture.java b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCapture.java
new file mode 100644
index 0000000..b539ade
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCapture.java
@@ -0,0 +1,1326 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCapture.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class SignatureCapture
+  extends BaseJposControl
+  implements SignatureCaptureControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected SignatureCaptureService12 service12;
+  protected SignatureCaptureService13 service13;
+  protected SignatureCaptureService14 service14;
+  protected SignatureCaptureService15 service15;
+  protected SignatureCaptureService16 service16;
+  protected SignatureCaptureService17 service17;
+  protected SignatureCaptureService18 service18;
+  protected SignatureCaptureService19 service19;
+  protected SignatureCaptureService110 service110;
+  protected SignatureCaptureService111 service111;
+  protected SignatureCaptureService112 service112;
+  protected SignatureCaptureService113 service113;
+  protected SignatureCaptureService114 service114;
+  protected Vector dataListeners;
+  protected Vector directIOListeners;
+  protected Vector errorListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public SignatureCapture()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS SignatureCapture Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service12 = null;
+    //service13 = null;
+    //service14 = null;
+    //service15 = null;
+    //service16 = null;
+    //service17 = null;
+    //service18 = null;
+    //service19 = null;
+    //service110 = null;
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    dataListeners = new Vector();
+    directIOListeners = new Vector();
+    errorListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapDisplay()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapDisplay();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapRealTimeData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapRealTimeData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUserTerminated()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapUserTerminated();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public boolean getAutoDisable()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getAutoDisable();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAutoDisable(boolean autoDisable)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setAutoDisable(autoDisable);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getDataCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getDataCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getDataEventEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getDataEventEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDataEventEnabled(boolean dataEventEnabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setDataEventEnabled(dataEventEnabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getMaximumX()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getMaximumX();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getMaximumY()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getMaximumY();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public java.awt.Point[] getPointArray()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getPointArray();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public byte[] getRawData()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getRawData();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getRealTimeDataEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getRealTimeDataEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setRealTimeDataEnabled(boolean realTimeDataEnabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setRealTimeDataEnabled(realTimeDataEnabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void beginCapture(String formName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.beginCapture(formName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearInput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.clearInput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void endCapture()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.endCapture();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearInputProperties()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.10.0
+    if(serviceVersion < deviceVersion110)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.10.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.clearInputProperties();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new SignatureCaptureCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service12 = null;
+      service13 = null;
+      service14 = null;
+      service15 = null;
+      service16 = null;
+      service17 = null;
+      service18 = null;
+      service19 = null;
+      service110 = null;
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion12)
+      {
+        try
+        {
+          service12 = (SignatureCaptureService12)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement SignatureCaptureService12 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion13)
+      {
+        try
+        {
+          service13 = (SignatureCaptureService13)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement SignatureCaptureService13 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion14)
+      {
+        try
+        {
+          service14 = (SignatureCaptureService14)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement SignatureCaptureService14 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion15)
+      {
+        try
+        {
+          service15 = (SignatureCaptureService15)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement SignatureCaptureService15 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion16)
+      {
+        try
+        {
+          service16 = (SignatureCaptureService16)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement SignatureCaptureService16 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion17)
+      {
+        try
+        {
+          service17 = (SignatureCaptureService17)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement SignatureCaptureService17 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion18)
+      {
+        try
+        {
+          service18 = (SignatureCaptureService18)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement SignatureCaptureService18 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion19)
+      {
+        try
+        {
+          service19 = (SignatureCaptureService19)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement SignatureCaptureService19 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion110)
+      {
+        try
+        {
+          service110 = (SignatureCaptureService110)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement SignatureCaptureService110 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (SignatureCaptureService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement SignatureCaptureService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (SignatureCaptureService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement SignatureCaptureService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (SignatureCaptureService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement SignatureCaptureService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (SignatureCaptureService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement SignatureCaptureService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.addElement(l);
+    }
+  }
+
+  public void removeDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.removeElement(l);
+    }
+  }
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.addElement(l);
+    }
+  }
+
+  public void removeErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class SignatureCaptureCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)SignatureCapture.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+      synchronized(SignatureCapture.this.dataListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < dataListeners.size(); x++)
+        {
+          ((DataListener)dataListeners.elementAt(x)).dataOccurred(e);
+        }
+      }
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(SignatureCapture.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+      synchronized(SignatureCapture.this.errorListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < errorListeners.size(); x++)
+        {
+          ((ErrorListener)errorListeners.elementAt(x)).errorOccurred(e);
+        }
+      }
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(SignatureCapture.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCapture.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCapture.manifest.stub
new file mode 100644
index 0000000..fd57477
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCapture.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/SignatureCapture.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureBeanInfo.java
new file mode 100644
index 0000000..e736ae7
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureBeanInfo.java
@@ -0,0 +1,101 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// SignatureCaptureBeanInfo.java - Bean information for the JavaPOS SignatureCapture
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class SignatureCaptureBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.SignatureCapture.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.SignatureCapture.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapDisplay"),
+        makeProperty("CapRealTimeData"),
+        makeProperty("CapUserTerminated"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapUpdateFirmware"),
+
+        // Properties
+        makeProperty("AutoDisable"),
+        makeProperty("DataCount"),
+        makeProperty("DataEventEnabled"),
+        makeProperty("MaximumX"),
+        makeProperty("MaximumY"),
+        makeProperty("PointArray"),
+        makeProperty("RawData"),
+        makeProperty("RealTimeDataEnabled"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState")
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.SignatureCapture.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("Data"),
+        makeEvent("DirectIO"),
+        makeEvent("Error"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureConst.java
new file mode 100644
index 0000000..c713534
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureConst.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCaptureConst
+//
+//   Signature Capture constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface SignatureCaptureConst
+{
+    //###################################################################
+    //#### Signature Capture Constants
+    //###################################################################
+
+    // No definitions required for this version.
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl110.java b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl110.java
new file mode 100644
index 0000000..129fad1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl110.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCaptureControl110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Signature Capture for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface SignatureCaptureControl110 extends SignatureCaptureControl19
+{
+  // Methods
+  public void    clearInputProperties()
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl111.java
new file mode 100644
index 0000000..5697d81
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCaptureControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Signature Capture for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface SignatureCaptureControl111 extends SignatureCaptureControl110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl112.java
new file mode 100644
index 0000000..1a330ca
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCaptureControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Signature Capture for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface SignatureCaptureControl112 extends SignatureCaptureControl111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl113.java
new file mode 100644
index 0000000..63e8723
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCaptureControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Signature Capture for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface SignatureCaptureControl113 extends SignatureCaptureControl112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl114.java
new file mode 100644
index 0000000..9b87400
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCaptureControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Signature Capture for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface SignatureCaptureControl114 extends SignatureCaptureControl113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl12.java b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl12.java
new file mode 100644
index 0000000..080f7d0
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl12.java
@@ -0,0 +1,63 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// Signature CaptureControl12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to Signature Capture for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface SignatureCaptureControl12 extends BaseControl
+{
+    // Capabilities
+    public boolean getCapDisplay() throws JposException;
+    public boolean getCapRealTimeData() throws JposException;
+    public boolean getCapUserTerminated() throws JposException;
+
+    // Properties
+    public boolean getAutoDisable() throws JposException;
+    public void    setAutoDisable(boolean autoDisable) throws JposException;
+    public int     getDataCount() throws JposException;
+    public boolean getDataEventEnabled() throws JposException;
+    public void    setDataEventEnabled(boolean dataEventEnabled)
+                       throws JposException;
+    public int     getMaximumX() throws JposException;
+    public int     getMaximumY() throws JposException;
+    public java.awt.Point[]
+                   getPointArray() throws JposException;
+    public byte[]  getRawData() throws JposException;
+    public boolean getRealTimeDataEnabled() throws JposException;
+    public void    setRealTimeDataEnabled(boolean realTimeDataEnabled)
+                       throws JposException;
+
+    // Methods
+    public void    beginCapture(String formName) throws JposException;
+    public void    clearInput() throws JposException;
+    public void    endCapture() throws JposException;
+
+    // Event listener methods
+    public void    addDataListener(DataListener l);
+    public void    removeDataListener(DataListener l);
+    public void    addDirectIOListener(DirectIOListener l);
+    public void    removeDirectIOListener(DirectIOListener l);
+    public void    addErrorListener(ErrorListener l);
+    public void    removeErrorListener(ErrorListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl13.java b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl13.java
new file mode 100644
index 0000000..ba1fa9a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl13.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCaptureControl13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Signature Capture for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface SignatureCaptureControl13 extends SignatureCaptureControl12
+{
+    // Capabilities
+  public int     getCapPowerReporting() throws JposException;
+
+    // Properties
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+
+    // Event listener methods
+    public void    addStatusUpdateListener(StatusUpdateListener l);
+    public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl14.java b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl14.java
new file mode 100644
index 0000000..48a6ab1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCaptureControl14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Signature Capture for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface SignatureCaptureControl14 extends SignatureCaptureControl13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl15.java b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl15.java
new file mode 100644
index 0000000..4f141cb
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl15.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCaptureControl15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Signature Capture for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 00-04-17 JavaPOS Release 1.5                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface SignatureCaptureControl15 extends SignatureCaptureControl14
+{
+  // Nothing new added for release 1.5
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl16.java b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl16.java
new file mode 100644
index 0000000..bda9c09
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl16.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCaptureControl16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Signature Capture for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-04-18 JavaPOS Release 1.6                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface SignatureCaptureControl16 extends SignatureCaptureControl15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl17.java b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl17.java
new file mode 100644
index 0000000..a9fc1e6
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl17.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCaptureControl17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Signature Capture for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface SignatureCaptureControl17 extends SignatureCaptureControl16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl18.java b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl18.java
new file mode 100644
index 0000000..a75208e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl18.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCaptureControl18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Signature Capture for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface SignatureCaptureControl18 extends SignatureCaptureControl17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl19.java b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl19.java
new file mode 100644
index 0000000..d8545e2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SignatureCaptureControl19.java
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCaptureControl19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Signature Capture for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface SignatureCaptureControl19 extends SignatureCaptureControl18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRW.java b/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRW.java
new file mode 100644
index 0000000..b309cd6
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRW.java
@@ -0,0 +1,1437 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SmartCardRW.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class SmartCardRW
+  extends BaseJposControl
+  implements SmartCardRWControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected SmartCardRWService18 service18;
+  protected SmartCardRWService19 service19;
+  protected SmartCardRWService110 service110;
+  protected SmartCardRWService111 service111;
+  protected SmartCardRWService112 service112;
+  protected SmartCardRWService113 service113;
+  protected SmartCardRWService114 service114;
+  protected Vector dataListeners;
+  protected Vector directIOListeners;
+  protected Vector errorListeners;
+  protected Vector outputCompleteListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public SmartCardRW()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS SmartCardRW Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service18 = null;
+    //service19 = null;
+    //service110 = null;
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    dataListeners = new Vector();
+    directIOListeners = new Vector();
+    errorListeners = new Vector();
+    outputCompleteListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapCardErrorDetection()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapCardErrorDetection();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapInterfaceMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapInterfaceMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapIsoEmvMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapIsoEmvMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapSCPresentSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapSCPresentSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapSCSlots()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapSCSlots();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapTransmissionProtocol()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapTransmissionProtocol();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public int getDataCount()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getDataCount();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getDataEventEnabled()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getDataEventEnabled();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setDataEventEnabled(boolean dataEventEnabled)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.setDataEventEnabled(dataEventEnabled);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getInterfaceMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getInterfaceMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setInterfaceMode(int interfaceMode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.setInterfaceMode(interfaceMode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getIsoEmvMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getIsoEmvMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setIsoEmvMode(int isoEmvMode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.setIsoEmvMode(isoEmvMode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getOutputID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getOutputID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getSCPresentSensor()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getSCPresentSensor();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getSCSlot()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getSCSlot();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setSCSlot(int scSlot)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.setSCSlot(scSlot);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getTransactionInProgress()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getTransactionInProgress();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getTransmissionProtocol()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getTransmissionProtocol();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void beginInsertion(int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.beginInsertion(timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void beginRemoval(int timeout)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.beginRemoval(timeout);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearInput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.clearInput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearOutput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.clearOutput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void endInsertion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.endInsertion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void endRemoval()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.endRemoval();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void readData(int action, int[] count, String[] data)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.readData(action, count, data);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void writeData(int action, int count, String data)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.writeData(action, count, data);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void clearInputProperties()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.10.0
+    if(serviceVersion < deviceVersion110)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.10.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service110.clearInputProperties();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new SmartCardRWCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service18 = null;
+      service19 = null;
+      service110 = null;
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion18)
+      {
+        try
+        {
+          service18 = (SmartCardRWService18)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement SmartCardRWService18 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion19)
+      {
+        try
+        {
+          service19 = (SmartCardRWService19)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement SmartCardRWService19 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion110)
+      {
+        try
+        {
+          service110 = (SmartCardRWService110)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement SmartCardRWService110 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (SmartCardRWService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement SmartCardRWService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (SmartCardRWService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement SmartCardRWService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (SmartCardRWService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement SmartCardRWService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (SmartCardRWService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement SmartCardRWService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.addElement(l);
+    }
+  }
+
+  public void removeDataListener(DataListener l)
+  {
+    synchronized(dataListeners)
+    {
+      dataListeners.removeElement(l);
+    }
+  }
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.addElement(l);
+    }
+  }
+
+  public void removeErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.removeElement(l);
+    }
+  }
+
+  public void addOutputCompleteListener(OutputCompleteListener l)
+  {
+    synchronized(outputCompleteListeners)
+    {
+      outputCompleteListeners.addElement(l);
+    }
+  }
+
+  public void removeOutputCompleteListener(OutputCompleteListener l)
+  {
+    synchronized(outputCompleteListeners)
+    {
+      outputCompleteListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class SmartCardRWCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)SmartCardRW.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+      synchronized(SmartCardRW.this.dataListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < dataListeners.size(); x++)
+        {
+          ((DataListener)dataListeners.elementAt(x)).dataOccurred(e);
+        }
+      }
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(SmartCardRW.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+      synchronized(SmartCardRW.this.errorListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < errorListeners.size(); x++)
+        {
+          ((ErrorListener)errorListeners.elementAt(x)).errorOccurred(e);
+        }
+      }
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+      synchronized(SmartCardRW.this.outputCompleteListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < outputCompleteListeners.size(); x++)
+        {
+          ((OutputCompleteListener)outputCompleteListeners.elementAt(x)).outputCompleteOccurred(e);
+        }
+      }
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(SmartCardRW.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRW.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRW.manifest.stub
new file mode 100644
index 0000000..340ff04
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRW.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/SmartCardRW.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWBeanInfo.java
new file mode 100644
index 0000000..4c4da7e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWBeanInfo.java
@@ -0,0 +1,106 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// SmartCardRWBeanInfo.java - Bean information for the JavaPOS SmartCardRW
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class SmartCardRWBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.SmartCardRW.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.SmartCardRW.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapCardErrorDetection"),
+        makeProperty("CapInterfaceMode"),
+        makeProperty("CapIsoEmvMode"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapSCPresentSensor"),
+        makeProperty("CapSCSlots"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapTransmissionProtocol"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapUpdateFirmware"),
+
+        // Properties
+        makeProperty("DataCount"),
+        makeProperty("DataEventEnabled"),
+        makeProperty("InterfaceMode"),
+        makeProperty("IsoEmvMode"),
+        makeProperty("OutputID"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState"),
+        makeProperty("SCPresentSensor"),
+        makeProperty("SCSlot"),
+        makeProperty("TransactionInProgress"),
+        makeProperty("TransmissionProtocol")
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.SmartCardRW.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("Data"),
+        makeEvent("DirectIO"),
+        makeEvent("Error"),
+        makeEvent("OutputComplete"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWConst.java
new file mode 100644
index 0000000..e5aad3b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWConst.java
@@ -0,0 +1,120 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SmartCardRWConst
+//
+//   Smart Card constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 03-Jun-2003 JavaPOS Release 1.8                                BS
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface SmartCardRWConst
+{
+  //###################################################################
+  //#### Smart Card Constants
+  //###################################################################
+
+  /////////////////////////////////////////////////////////////////////
+  // "CapInterfaceMode", "InterfaceMode" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int SC_CMODE_TRANS = 1;  // Simple Transaction Command and Data Mode.
+  public static final int SC_CMODE_BLOCK = 2;  // Block Data Mode.
+  public static final int SC_CMODE_APDU  = 4;  // Same as Block Data Mode except APDU Standard Commands are used.
+  public static final int SC_CMODE_XML   = 8;  // XML Block Data Mode.
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "CapIsoEmvMode" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int SC_CMODE_ISO = 1;  // APDU messaging format conforms to the ISO standard.
+  public static final int SC_CMODE_EMV = 2;  // APDU messaging format conforms to the EMV standard.
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "CapTransmissionProtocol" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int SC_CTRANS_PROTOCOL_T0 = 1;  // Asynchronous, Half Duplex, Character, Transmission Protocol Mode.
+  public static final int SC_CTRANS_PROTOCOL_T1 = 2;  // Asynchronous, Half Duplex, Block Transmission Protocol Mode.
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "InterfaceMode" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int SC_MODE_TRANS = 1;  // Simple Transaction Command and Data Mode.
+  public static final int SC_MODE_BLOCK = 2;  // Block Data Mode.
+  public static final int SC_MODE_APDU  = 4;  // Same as Block Data Mode except APDU Standard Defines the Commands and data.
+  public static final int SC_MODE_XML   = 8;  // XML Block Data Mode.
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "IsoEmvMode" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int SC_MODE_ISO = 1;  // APDU messaging format currently in use conforms to the ISO standard.
+  public static final int SC_MODE_EMV = 2;  // APDU messaging format currently in use conforms to the EMV standard.
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "TransmissionProtocol" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int SC_TRANS_PROTOCOL_T0 = 1;  // Asynchronous, Half Duplex, Character, Transmission Protocol Mode.
+  public static final int SC_TRANS_PROTOCOL_T1 = 2;  // Asynchronous, Half Duplex, Block Transmission Protocol Mode.
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "readData" Method, "action" Parameter Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int SC_READ_DATA             = 11;
+  public static final int SC_READ_PROGRAM          = 12;
+  public static final int SC_EXECUTE_AND_READ_DATA = 13;
+  public static final int SC_XML_READ_BLOCK_DATA   = 14;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "writeData" Method, "action" Parameter Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int SC_STORE_DATA     = 21;
+  public static final int SC_STORE_PROGRAM  = 22;
+  public static final int SC_EXECUTE_DATA   = 23;
+  public static final int SC_XML_BLOCK_DATA = 24;
+  public static final int SC_SECURITY_FUSE  = 25;
+  public static final int SC_RESET          = 26;
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "StatusUpdateEvent" "Status" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int SC_SUE_NO_CARD      = 1;  // No card detected in the SCR/W Device.
+  public static final int SC_SUE_CARD_PRESENT = 2;  // There is a card in the device.
+
+
+  /////////////////////////////////////////////////////////////////////
+  // "ErrorEvent" "ErrorCodeExtended" Property Constants
+  /////////////////////////////////////////////////////////////////////
+
+  public static final int JPOS_ESC_READ    = 201;  // There was a read error.
+  public static final int JPOS_ESC_WRITE   = 202;  // There was a write error.
+  public static final int JPOS_ESC_TORN    = 203;  // The smart card was prematurely removed from the SCR/W unexpectedly. Note: CapCardErrorDetection capability must be true before this can be set.
+  public static final int JPOS_ESC_NO_CARD = 204;  // There is no card detected in the SCR/W but a card was expected.
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWControl110.java b/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWControl110.java
new file mode 100644
index 0000000..ce8403c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWControl110.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SmartCardRWControl110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Smart Card for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface SmartCardRWControl110 extends SmartCardRWControl19
+{
+  // Methods
+  public void    clearInputProperties()
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWControl111.java
new file mode 100644
index 0000000..aff46f2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWControl111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SmartCardRWControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Smart Card for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface SmartCardRWControl111 extends SmartCardRWControl110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWControl112.java
new file mode 100644
index 0000000..98ce6b2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWControl112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SmartCardRWControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Smart Card for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface SmartCardRWControl112 extends SmartCardRWControl111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWControl113.java
new file mode 100644
index 0000000..a22466b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWControl113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SmartCardRWControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Smart Card for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface SmartCardRWControl113 extends SmartCardRWControl112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWControl114.java
new file mode 100644
index 0000000..bdf7f68
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SmartCardRWControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Smart Card RW for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface SmartCardRWControl114 extends SmartCardRWControl113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWControl18.java b/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWControl18.java
new file mode 100644
index 0000000..dd24749
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWControl18.java
@@ -0,0 +1,106 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SmartCardRWControl18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Smart Card for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//   Issues reported that draft specification methods and properties
+//   were still present in the 1.8 code releases.
+//   Removed:
+//     getCapFreeMemory
+//     getCapMultipleFiles
+//     getCapSCTypes
+//     getFreeMemory
+//     getMemorySegments
+//     getSCType
+//     getTotalMemorySize
+//   Added:
+//     getCapIsoEmvMode
+//     getIsoEmvMode
+//     setIsoEmvMode
+//   Fixed:
+//     count parameter of readData is now int[] instead of int
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface SmartCardRWControl18 extends BaseControl
+{
+  // Capabilities
+  public boolean getCapCardErrorDetection() throws JposException;
+  public int     getCapInterfaceMode() throws JposException;
+  public int     getCapIsoEmvMode() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public int     getCapSCPresentSensor() throws JposException;
+  public int     getCapSCSlots() throws JposException;
+  public boolean getCapStatisticsReporting() throws JposException;
+  public int     getCapTransmissionProtocol() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Properties
+  public int     getDataCount() throws JposException;
+  public boolean getDataEventEnabled() throws JposException;
+  public void    setDataEventEnabled(boolean dataEventEnabled)
+           throws JposException;
+  public int     getInterfaceMode() throws JposException;
+  public void    setInterfaceMode(int interfaceMode) throws JposException;
+  public int     getIsoEmvMode() throws JposException;
+  public void    setIsoEmvMode(int isoEmvMode) throws JposException;
+  public int     getOutputID() throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+  public int     getSCPresentSensor() throws JposException;
+  public int     getSCSlot() throws JposException;
+  public void    setSCSlot(int scSlot) throws JposException;
+  public boolean getTransactionInProgress() throws JposException;
+  public int     getTransmissionProtocol() throws JposException;
+
+  // Methods
+  public void    beginInsertion(int timeout) throws JposException;
+  public void    beginRemoval(int timeout) throws JposException;
+  public void    clearInput()  throws JposException;
+  public void    clearOutput()  throws JposException;
+  public void    endInsertion() throws JposException;
+  public void    endRemoval() throws JposException;
+  public void    readData(int action, int[] count, String[] data)
+                     throws JposException;
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    writeData(int action, int count, String data)
+                     throws JposException;
+
+  // Event listener methods
+  public void    addDataListener(DataListener l);
+  public void    removeDataListener(DataListener l);
+  public void    addDirectIOListener(DirectIOListener l);
+  public void    removeDirectIOListener(DirectIOListener l);
+  public void    addErrorListener(ErrorListener l);
+  public void    removeErrorListener(ErrorListener l);
+  public void    addOutputCompleteListener(OutputCompleteListener l);
+  public void    removeOutputCompleteListener(OutputCompleteListener l);
+  public void    addStatusUpdateListener(StatusUpdateListener l);
+  public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWControl19.java b/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWControl19.java
new file mode 100644
index 0000000..5b9b395
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/SmartCardRWControl19.java
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SmartCardRWControl19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Smart Card for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface SmartCardRWControl19 extends SmartCardRWControl18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicator.java b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicator.java
new file mode 100644
index 0000000..b90d9b1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicator.java
@@ -0,0 +1,1579 @@
+//------------------------------------------------------------------------------
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicator.java - A JavaPOS 1.14.0 device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import jpos.events.*;
+import jpos.services.*;
+import java.util.Vector;
+import jpos.loader.*;
+
+public class ToneIndicator
+  extends BaseJposControl
+  implements ToneIndicatorControl114, JposConst
+{
+  //--------------------------------------------------------------------------
+  // Variables
+  //--------------------------------------------------------------------------
+
+  protected ToneIndicatorService12 service12;
+  protected ToneIndicatorService13 service13;
+  protected ToneIndicatorService14 service14;
+  protected ToneIndicatorService15 service15;
+  protected ToneIndicatorService16 service16;
+  protected ToneIndicatorService17 service17;
+  protected ToneIndicatorService18 service18;
+  protected ToneIndicatorService19 service19;
+  protected ToneIndicatorService110 service110;
+  protected ToneIndicatorService111 service111;
+  protected ToneIndicatorService112 service112;
+  protected ToneIndicatorService113 service113;
+  protected ToneIndicatorService114 service114;
+  protected Vector directIOListeners;
+  protected Vector errorListeners;
+  protected Vector outputCompleteListeners;
+  protected Vector statusUpdateListeners;
+
+
+  //--------------------------------------------------------------------------
+  // Constructor
+  //--------------------------------------------------------------------------
+
+  public ToneIndicator()
+  {
+    // Initialize base class instance data
+    deviceControlDescription = "JavaPOS ToneIndicator Device Control";
+    deviceControlVersion = deviceVersion114;
+
+    // Initialize instance data. Initializations are commented out for
+    // efficiency if the Java default is correct.
+    //service12 = null;
+    //service13 = null;
+    //service14 = null;
+    //service15 = null;
+    //service16 = null;
+    //service17 = null;
+    //service18 = null;
+    //service19 = null;
+    //service110 = null;
+    //service111 = null;
+    //service112 = null;
+    //service113 = null;
+    //service114 = null;
+    directIOListeners = new Vector();
+    errorListeners = new Vector();
+    outputCompleteListeners = new Vector();
+    statusUpdateListeners = new Vector();
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Capabilities
+  //--------------------------------------------------------------------------
+
+  public boolean getCapPitch()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapPitch();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapVolume()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getCapVolume();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapPowerReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getCapPowerReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapStatisticsReporting()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapStatisticsReporting();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateStatistics()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service18.getCapUpdateStatistics();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapCompareFirmwareVersion()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapCompareFirmwareVersion();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public boolean getCapUpdateFirmware()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service19.getCapUpdateFirmware();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getCapMelody()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.13.0
+    if(serviceVersion < deviceVersion113)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.13.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service113.getCapMelody();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Properties
+  //--------------------------------------------------------------------------
+
+  public boolean getAsyncMode()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getAsyncMode();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setAsyncMode(boolean asyncMode)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setAsyncMode(asyncMode);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getInterToneWait()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getInterToneWait();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setInterToneWait(int interToneWait)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setInterToneWait(interToneWait);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getOutputID()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getOutputID();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getTone1Duration()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getTone1Duration();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setTone1Duration(int tone1Duration)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setTone1Duration(tone1Duration);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getTone1Pitch()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getTone1Pitch();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setTone1Pitch(int tone1Pitch)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setTone1Pitch(tone1Pitch);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getTone1Volume()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getTone1Volume();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setTone1Volume(int tone1Volume)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setTone1Volume(tone1Volume);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getTone2Duration()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getTone2Duration();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setTone2Duration(int tone2Duration)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setTone2Duration(tone2Duration);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getTone2Pitch()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getTone2Pitch();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setTone2Pitch(int tone2Pitch)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setTone2Pitch(tone2Pitch);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getTone2Volume()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service12.getTone2Volume();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setTone2Volume(int tone2Volume)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.setTone2Volume(tone2Volume);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerNotify()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerNotify();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setPowerNotify(int powerNotify)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service13.setPowerNotify(powerNotify);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getPowerState()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.3.0
+    if(serviceVersion < deviceVersion13)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.3.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service13.getPowerState();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getMelodyType()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.13.0
+    if(serviceVersion < deviceVersion113)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.13.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service113.getMelodyType();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setMelodyType(int melodyType)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.13.0
+    if(serviceVersion < deviceVersion113)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.13.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service113.setMelodyType(melodyType);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public int getMelodyVolume()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.13.0
+    if(serviceVersion < deviceVersion113)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.13.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      return service113.getMelodyVolume();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void setMelodyVolume(int melodyVolume)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.13.0
+    if(serviceVersion < deviceVersion113)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.13.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service113.setMelodyVolume(melodyVolume);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Methods
+  //--------------------------------------------------------------------------
+
+  public void clearOutput()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.clearOutput();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void sound(int numberOfCycles, int interSoundWait)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.sound(numberOfCycles, interSoundWait);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void soundImmediate()
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Perform the operation
+    try
+    {
+      service12.soundImmediate();
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void resetStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.resetStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void retrieveStatistics(String[] statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.retrieveStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateStatistics(String statisticsBuffer)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.8.0
+    if(serviceVersion < deviceVersion18)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.8.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service18.updateStatistics(statisticsBuffer);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void compareFirmwareVersion(String firmwareFileName, int[] result)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.compareFirmwareVersion(firmwareFileName, result);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+  public void updateFirmware(String firmwareFileName)
+    throws JposException
+  {
+    // Make sure control is opened
+    if(!bOpen)
+    {
+      throw new JposException(JPOS_E_CLOSED, "Control not opened");
+    }
+
+    // Make sure service supports at least version 1.9.0
+    if(serviceVersion < deviceVersion19)
+    {
+      throw new JposException(JPOS_E_NOSERVICE,
+                              "Device Service is not 1.9.0 compliant.");
+    }
+
+    // Perform the operation
+    try
+    {
+      service19.updateFirmware(firmwareFileName);
+    }
+    catch(JposException je)
+    {
+      throw je;
+    }
+    catch(Exception e)
+    {
+      throw new JposException(JPOS_E_FAILURE,
+                              "Unhandled exception from Device Service", e);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Framework Methods
+  //--------------------------------------------------------------------------
+
+  // Create an EventCallbacks interface implementation object for this Control
+  protected EventCallbacks createEventCallbacks()
+  {
+    return new ToneIndicatorCallbacks();
+  }
+
+  // Store the reference to the Device Service
+  protected void setDeviceService(BaseService service, int nServiceVersion)
+    throws JposException
+  {
+    // Special case: service == null to free references
+    if(service == null)
+    {
+
+      service12 = null;
+      service13 = null;
+      service14 = null;
+      service15 = null;
+      service16 = null;
+      service17 = null;
+      service18 = null;
+      service19 = null;
+      service110 = null;
+      service111 = null;
+      service112 = null;
+      service113 = null;
+      service114 = null;
+    }
+    else
+    {
+      // Make sure that the service actually conforms to the interfaces it
+      // claims to.
+      if(serviceVersion >= deviceVersion12)
+      {
+        try
+        {
+          service12 = (ToneIndicatorService12)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ToneIndicatorService12 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion13)
+      {
+        try
+        {
+          service13 = (ToneIndicatorService13)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ToneIndicatorService13 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion14)
+      {
+        try
+        {
+          service14 = (ToneIndicatorService14)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ToneIndicatorService14 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion15)
+      {
+        try
+        {
+          service15 = (ToneIndicatorService15)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ToneIndicatorService15 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion16)
+      {
+        try
+        {
+          service16 = (ToneIndicatorService16)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ToneIndicatorService16 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion17)
+      {
+        try
+        {
+          service17 = (ToneIndicatorService17)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ToneIndicatorService17 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion18)
+      {
+        try
+        {
+          service18 = (ToneIndicatorService18)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ToneIndicatorService18 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion19)
+      {
+        try
+        {
+          service19 = (ToneIndicatorService19)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ToneIndicatorService19 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion110)
+      {
+        try
+        {
+          service110 = (ToneIndicatorService110)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ToneIndicatorService110 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion111)
+      {
+        try
+        {
+          service111 = (ToneIndicatorService111)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ToneIndicatorService111 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion112)
+      {
+        try
+        {
+          service112 = (ToneIndicatorService112)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ToneIndicatorService112 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion113)
+      {
+        try
+        {
+          service113 = (ToneIndicatorService113)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ToneIndicatorService113 interface",
+                                  e);
+        }
+      }
+
+      if(serviceVersion >= deviceVersion114)
+      {
+        try
+        {
+          service114 = (ToneIndicatorService114)service;
+        }
+        catch(Exception e)
+        {
+          throw new JposException(JPOS_E_NOSERVICE,
+                                  "Service does not fully implement ToneIndicatorService114 interface",
+                                  e);
+        }
+      }
+
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // Event Listener Methods
+  //--------------------------------------------------------------------------
+
+  public void addDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.addElement(l);
+    }
+  }
+
+  public void removeDirectIOListener(DirectIOListener l)
+  {
+    synchronized(directIOListeners)
+    {
+      directIOListeners.removeElement(l);
+    }
+  }
+
+  public void addErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.addElement(l);
+    }
+  }
+
+  public void removeErrorListener(ErrorListener l)
+  {
+    synchronized(errorListeners)
+    {
+      errorListeners.removeElement(l);
+    }
+  }
+
+  public void addOutputCompleteListener(OutputCompleteListener l)
+  {
+    synchronized(outputCompleteListeners)
+    {
+      outputCompleteListeners.addElement(l);
+    }
+  }
+
+  public void removeOutputCompleteListener(OutputCompleteListener l)
+  {
+    synchronized(outputCompleteListeners)
+    {
+      outputCompleteListeners.removeElement(l);
+    }
+  }
+
+  public void addStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.addElement(l);
+    }
+  }
+
+  public void removeStatusUpdateListener(StatusUpdateListener l)
+  {
+    synchronized(statusUpdateListeners)
+    {
+      statusUpdateListeners.removeElement(l);
+    }
+  }
+
+
+  //--------------------------------------------------------------------------
+  // EventCallbacks inner class
+  //--------------------------------------------------------------------------
+
+  protected class ToneIndicatorCallbacks
+    implements EventCallbacks
+  {
+    public BaseControl getEventSource()
+    {
+      return (BaseControl)ToneIndicator.this;
+    }
+
+    public void fireDataEvent(DataEvent e)
+    {
+    }
+
+    public void fireDirectIOEvent(DirectIOEvent e)
+    {
+      synchronized(ToneIndicator.this.directIOListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < directIOListeners.size(); x++)
+        {
+          ((DirectIOListener)directIOListeners.elementAt(x)).directIOOccurred(e);
+        }
+      }
+    }
+
+    public void fireErrorEvent(ErrorEvent e)
+    {
+      synchronized(ToneIndicator.this.errorListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < errorListeners.size(); x++)
+        {
+          ((ErrorListener)errorListeners.elementAt(x)).errorOccurred(e);
+        }
+      }
+    }
+
+    public void fireOutputCompleteEvent(OutputCompleteEvent e)
+    {
+      synchronized(ToneIndicator.this.outputCompleteListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < outputCompleteListeners.size(); x++)
+        {
+          ((OutputCompleteListener)outputCompleteListeners.elementAt(x)).outputCompleteOccurred(e);
+        }
+      }
+    }
+
+    public void fireStatusUpdateEvent(StatusUpdateEvent e)
+    {
+      synchronized(ToneIndicator.this.statusUpdateListeners)
+      {
+        // deliver the event to all registered listeners
+        for(int x = 0; x < statusUpdateListeners.size(); x++)
+        {
+          ((StatusUpdateListener)statusUpdateListeners.elementAt(x)).statusUpdateOccurred(e);
+        }
+      }
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicator.manifest.stub b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicator.manifest.stub
new file mode 100644
index 0000000..5aa0c91
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicator.manifest.stub
@@ -0,0 +1,2 @@
+Name: jpos/ToneIndicator.class
+Java-Bean: True
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorBeanInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorBeanInfo.java
new file mode 100644
index 0000000..94c889e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorBeanInfo.java
@@ -0,0 +1,105 @@
+//------------------------------------------------------------------------------
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// ToneIndicatorBeanInfo.java - Bean information for the JavaPOS ToneIndicator
+//    device control
+//
+//------------------------------------------------------------------------------
+
+package jpos;
+
+import java.beans.*;
+import java.lang.reflect.*;
+
+public class ToneIndicatorBeanInfo
+  extends SimpleBeanInfo
+{
+  public BeanDescriptor getBeanDescriptor()
+  {
+    return new BeanDescriptor(jpos.ToneIndicator.class);
+  }
+
+  public PropertyDescriptor makeProperty(String propertyName)
+    throws IntrospectionException
+  {
+    return new PropertyDescriptor(propertyName, jpos.ToneIndicator.class);
+  }
+
+  public PropertyDescriptor[] getPropertyDescriptors()
+  {
+    try
+    {
+      PropertyDescriptor[] properties =
+      {
+        // Capabilities
+        makeProperty("CapPitch"),
+        makeProperty("CapVolume"),
+        makeProperty("CapPowerReporting"),
+        makeProperty("CapStatisticsReporting"),
+        makeProperty("CapUpdateStatistics"),
+        makeProperty("CapCompareFirmwareVersion"),
+        makeProperty("CapUpdateFirmware"),
+        makeProperty("CapMelody"),
+
+        // Properties
+        makeProperty("AsyncMode"),
+        makeProperty("InterToneWait"),
+        makeProperty("OutputID"),
+        makeProperty("Tone1Duration"),
+        makeProperty("Tone1Pitch"),
+        makeProperty("Tone1Volume"),
+        makeProperty("Tone2Duration"),
+        makeProperty("Tone2Pitch"),
+        makeProperty("Tone2Volume"),
+        makeProperty("PowerNotify"),
+        makeProperty("PowerState"),
+        makeProperty("MelodyType"),
+        makeProperty("MelodyVolume"),
+
+      };
+
+      return properties;
+    }
+    catch(Exception e)
+    {
+      return super.getPropertyDescriptors();
+    }
+  }
+
+  public EventSetDescriptor makeEvent(String eventName)
+    throws IntrospectionException, ClassNotFoundException
+  {
+    String listener = "jpos.events." + eventName + "Listener";
+    return new EventSetDescriptor(jpos.ToneIndicator.class,
+                                  eventName,
+                                  Class.forName(listener),
+                                  eventName + "Occurred");
+  }
+
+  public EventSetDescriptor[] getEventSetDescriptors()
+  {
+    try
+    {
+      EventSetDescriptor[] events =
+      {
+        makeEvent("DirectIO"),
+        makeEvent("Error"),
+        makeEvent("OutputComplete"),
+        makeEvent("StatusUpdate")
+      };
+
+      return events;
+    }
+    catch(Exception e)
+    {
+      return super.getEventSetDescriptors();
+    }
+  }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorConst.java
new file mode 100644
index 0000000..1b680c3
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorConst.java
@@ -0,0 +1,51 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorConst
+//
+//   Tone Indicator constants for JavaPOS Applications.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+// 2009-Feb-23 JavaPOS Release 1.13                               BS
+//   Added "MelodyType"constant:
+//     TONE_MT_NONE
+// 2009-Oct-06 JavaPOS Release 1.13.1                             BS
+//   Added "MelodyType"constants:
+//     TONE_MT_TYPE1
+//     TONE_MT_TYPE2
+//     TONE_MT_TYPE3
+//     TONE_MT_TYPE4
+//     TONE_MT_TYPE5
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+public interface ToneIndicatorConst
+{
+    //###################################################################
+    //#### Tone Indicator Constants
+    //###################################################################
+
+    /////////////////////////////////////////////////////////////////////
+    // "MelodyType" Property Constants
+    /////////////////////////////////////////////////////////////////////
+
+    public static final int TONE_MT_NONE  = 0;
+    public static final int TONE_MT_TYPE1 = 1;
+    public static final int TONE_MT_TYPE2 = 2;
+    public static final int TONE_MT_TYPE3 = 3;
+    public static final int TONE_MT_TYPE4 = 4;
+    public static final int TONE_MT_TYPE5 = 5;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl110.java b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl110.java
new file mode 100644
index 0000000..1beb66b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl110.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorControl110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Tone Indicator for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ToneIndicatorControl110 extends ToneIndicatorControl19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl111.java b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl111.java
new file mode 100644
index 0000000..6581af7
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorControl111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Tone Indicator for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ToneIndicatorControl111 extends ToneIndicatorControl110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl112.java b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl112.java
new file mode 100644
index 0000000..505260d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorControl112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Tone Indicator for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ToneIndicatorControl112 extends ToneIndicatorControl111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl113.java b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl113.java
new file mode 100644
index 0000000..3a7f791
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl113.java
@@ -0,0 +1,38 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorControl113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Tone Indicator for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ToneIndicatorControl113 extends ToneIndicatorControl112
+{
+  // Capabilities
+  public int getCapMelody() throws JposException;
+
+  // Properties
+  public int  getMelodyType() throws JposException;
+  public void setMelodyType(int melodyType) throws JposException;
+  public int  getMelodyVolume() throws JposException;
+  public void setMelodyVolume(int melodyVolume) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl114.java b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl114.java
new file mode 100644
index 0000000..300311f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorControl114
+//
+// Interface definining all new capabilities, properties and methods
+// that are specific to Tone Indicator for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ToneIndicatorControl114 extends ToneIndicatorControl113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl12.java b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl12.java
new file mode 100644
index 0000000..01fae49
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl12.java
@@ -0,0 +1,66 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorControl12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to Tone Indicator for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ToneIndicatorControl12 extends BaseControl
+{
+    // Capabilities
+    public boolean getCapPitch() throws JposException;
+    public boolean getCapVolume() throws JposException;
+
+    // Properties
+    public boolean getAsyncMode() throws JposException;
+    public void    setAsyncMode(boolean asyncMode) throws JposException;
+    public int     getInterToneWait() throws JposException;
+    public void    setInterToneWait(int interToneWait) throws JposException;
+    public int     getOutputID() throws JposException;
+    public int     getTone1Duration() throws JposException;
+    public void    setTone1Duration(int tone1Duration) throws JposException;
+    public int     getTone1Pitch() throws JposException;
+    public void    setTone1Pitch(int tone1Pitch) throws JposException;
+    public int     getTone1Volume() throws JposException;
+    public void    setTone1Volume(int tone1Volume) throws JposException;
+    public int     getTone2Duration() throws JposException;
+    public void    setTone2Duration(int tone2Duration) throws JposException;
+    public int     getTone2Pitch() throws JposException;
+    public void    setTone2Pitch(int tone2Pitch) throws JposException;
+    public int     getTone2Volume() throws JposException;
+    public void    setTone2Volume(int tone2Volume) throws JposException;
+
+    // Methods
+    public void    clearOutput() throws JposException;
+    public void    sound(int numberOfCycles, int interSoundWait)
+                       throws JposException;
+    public void    soundImmediate() throws JposException;
+
+    // Event listener methods
+    public void    addDirectIOListener(DirectIOListener l);
+    public void    removeDirectIOListener(DirectIOListener l);
+    public void    addErrorListener(ErrorListener l);
+    public void    removeErrorListener(ErrorListener l);
+    public void    addOutputCompleteListener(OutputCompleteListener l);
+    public void    removeOutputCompleteListener(OutputCompleteListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl13.java b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl13.java
new file mode 100644
index 0000000..b26f329
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl13.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorControl13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Tone Indicator for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ToneIndicatorControl13 extends ToneIndicatorControl12
+{
+    // Capabilities
+  public int     getCapPowerReporting() throws JposException;
+
+    // Properties
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+
+    // Event listener methods
+    public void    addStatusUpdateListener(StatusUpdateListener l);
+    public void    removeStatusUpdateListener(StatusUpdateListener l);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl14.java b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl14.java
new file mode 100644
index 0000000..ebbd9c6
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorControl14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Tone Indicator for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ToneIndicatorControl14 extends ToneIndicatorControl13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl15.java b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl15.java
new file mode 100644
index 0000000..e02d155
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl15.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorControl15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Tone Indicator for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 00-04-17 JavaPOS Release 1.5                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ToneIndicatorControl15 extends ToneIndicatorControl14
+{
+  // Nothing new added for release 1.5
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl16.java b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl16.java
new file mode 100644
index 0000000..a645ff4
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl16.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorControl16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Tone Indicator for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-04-18 JavaPOS Release 1.6                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ToneIndicatorControl16 extends ToneIndicatorControl15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl17.java b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl17.java
new file mode 100644
index 0000000..ed6f02c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl17.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorControl17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Tone Indicator for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ToneIndicatorControl17 extends ToneIndicatorControl16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl18.java b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl18.java
new file mode 100644
index 0000000..1cf5901
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl18.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorControl18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Tone Indicator for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ToneIndicatorControl18 extends ToneIndicatorControl17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl19.java b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl19.java
new file mode 100644
index 0000000..6bcede2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/ToneIndicatorControl19.java
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorControl19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Tone Indicator for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos;
+
+import jpos.events.*;
+
+public interface ToneIndicatorControl19 extends ToneIndicatorControl18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/config/CompositeRegPopulator.java b/org.eclipse.osbp.fork.jpos/src/jpos/config/CompositeRegPopulator.java
new file mode 100644
index 0000000..7052f70
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/config/CompositeRegPopulator.java
@@ -0,0 +1,70 @@
+package jpos.config;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.util.*;
+
+/**
+ * Defines a composite interface collecting many JposRegPopulator objects
+ * See GoF Composite pattern for explanation on Composite classes/objects
+ * @since 1.3 (Washington DC 2001 meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface CompositeRegPopulator extends JposRegPopulator
+{
+    //-------------------------------------------------------------------------
+    // Public methods
+    //
+
+	/** @return the default JposRegPopulator */
+	public JposRegPopulator getDefaultPopulator();
+
+	/**
+	 * Adds this JposRegPopulator to the composite
+	 * @param populator adds the populator to the composite reg populator.  Does nothing
+	 * if the popualator already is in the composite
+	 */
+	public void add( JposRegPopulator populator );
+
+	/**
+	 * Removes this JposRegPopulator from the composite
+	 * @param populator removes the populator to the composite reg populator
+	 */
+	public void remove( JposRegPopulator populator );
+
+	/** @return an iterator over all populators in this composite */
+	public Iterator getPopulators();
+
+	/** 
+	 * @return the populator with unique ID passed
+	 * @param uniqueId the populator unique ID
+	 * @see jpos.config.JposRegPopulator#getUniqueId()
+	 */
+	public JposRegPopulator getPopulator( String uniqueId );
+
+	/** @return the number of populator in this composite */
+	public int size();
+
+	//-------------------------------------------------------------------------
+	// Constants
+	//
+
+	/** The default name for the CompositeRegPopulator */
+	public static final String COMPOSITE_REG_POPULATOR_STRING = "JCL Composite Entries Populator";
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/config/DefaultCompositeRegPopulator.java b/org.eclipse.osbp.fork.jpos/src/jpos/config/DefaultCompositeRegPopulator.java
new file mode 100644
index 0000000..f89f939
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/config/DefaultCompositeRegPopulator.java
@@ -0,0 +1,438 @@
+package jpos.config;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.util.*;
+import java.lang.reflect.*;
+import java.net.URL;
+
+import jpos.loader.*;
+import jpos.util.*;
+import jpos.util.tracing.Tracer;
+import jpos.util.tracing.TracerFactory;
+
+/**
+ * Default implementation of the CompositeRegPopulator interface
+ * @since 1.3 (Washington DC 2001 meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public class DefaultCompositeRegPopulator extends Object 
+										   implements CompositeRegPopulator
+{
+    //-------------------------------------------------------------------------
+    // Ctor(s)
+    //
+
+	/**
+	 * Creates a CompositePopulator with a null default populator 
+	 * NOTE: you must set the default populator before this is usable or
+	 * call the load() method which will set the default populator from
+	 * the multi-property in the jpos.properties file if that file exist
+	 */
+	public DefaultCompositeRegPopulator() {}
+
+	/**
+	 * Creates a CompositePopulator with a default populator 
+	 * @param populator the default populator for this composite
+	 */
+	public DefaultCompositeRegPopulator( JposRegPopulator populator ) 
+	{
+		add( populator );
+		setDefaultPopulator( populator );
+	}
+
+    //-------------------------------------------------------------------------
+    // Private methods
+    //
+
+	/** 
+	 * @return a JposPopulator using the popName as unique ID, populator class name passed
+	 * If could not create the populator then returns null and add a trace info
+	 * @param popName the unique ID for this populator
+	 * @param className the JposRegPopulator implementing class name
+	 */
+	private JposRegPopulator createPopulator( String popName, String className )
+	{
+		JposRegPopulator populator = null;
+
+		try
+		{
+			Class popClass = Class.forName( className );
+
+			try
+			{
+				Class[] ctorParamTypes = { String.class };
+				Constructor ctor = popClass.getConstructor( ctorParamTypes );
+
+				Object[] args = { popName };
+				populator = (JposRegPopulator)ctor.newInstance( args );
+			}
+			catch( NoSuchMethodException nsme )
+			{
+				Constructor ctor = popClass.getConstructor( new Class[ 0 ] );
+				populator = (JposRegPopulator)ctor.newInstance( new Object[ 0 ] );
+			}
+
+		}
+		catch( ClassNotFoundException cnfe )
+		{ 
+			tracer.println( "Could not find populator class with name: " + 
+										  className + " exception message = " + 
+										  cnfe.getMessage() );
+		}
+		catch( NoSuchMethodException nsme )
+		{
+			tracer.println( "Populator by class name: " + 
+			                className +
+							" must define a no-arg ctor or a 1-arg ctor with String param as the unique ID" );
+		}
+		catch( InstantiationException ie )
+		{
+			tracer.println( "Could not instantiate populator class with name: " + 
+						    className + " exception message = " + 
+							ie.getMessage() );
+		}
+		catch( Exception e )
+		{
+			tracer.println( "Could not instantiate populator class with name: " + 
+							className + " exception message = " + 
+							e.getMessage() );
+		}
+
+		return populator;
+	}
+
+    //-------------------------------------------------------------------------
+    // Protected methods
+    //
+
+	/**
+	 * Sets the default JposRegPopulator.  Orphan JposEntry objects (that is the ones that
+	 * do not have a JposRegPopulator) are automatically assign to this one.
+	 * @param populator the JposRegPopulator
+	 * @throws java.lang.IllegalArgumentException if the argument is null or not a valid JposRegPopulator
+	 */
+	protected void setDefaultPopulator( JposRegPopulator populator ) throws IllegalArgumentException
+	{
+		if( populator == null )
+			throw new IllegalArgumentException( "Null value cannot be used for default JposRegPopualtor" );
+
+		if( populator.getUniqueId() == null || "".equals( populator.getUniqueId() ) )
+			throw 
+			new IllegalArgumentException( "Default JposRegPopualtor cannot have a unique ID of null or empty string" );
+
+		add( populator );
+
+		defaultPop = populator;
+	}
+
+    //-------------------------------------------------------------------------
+    // Public JposRegPopulator methods
+    //
+
+	/**
+	 * @return a unique String ID for this JposRegPopulator instance
+	 * Can be implemented in terms of the getClassName() method
+	 */
+	public String getUniqueId() { return getClassName(); }
+
+	/** 
+	 * @return the fully qualified class name implementing the 
+	 * JposRegPopulator interface 
+	 */
+	public String getClassName() 
+	{ return DefaultCompositeRegPopulator.class.getName(); }
+
+    /**
+     * Tell the populator to save the current entries 
+     * @param entries an enumeration of JposEntry objects
+     * @throws java.lang.Exception if any error occurs while saving
+     */
+    public void save( Enumeration entries ) throws Exception
+	{
+		HashMap popEntriesMap = new HashMap();
+		
+		Iterator popIterator = popMap.values().iterator();
+		while( popIterator.hasNext() )
+			popEntriesMap.put( ( (JposRegPopulator)popIterator.next() ).
+			                   getUniqueId(),
+							   new ArrayList() );
+
+		while( entries.hasMoreElements() )
+		{
+			JposEntry entry = (JposEntry)entries.nextElement();
+
+			JposRegPopulator populator = (JposRegPopulator)entry.
+			                             getRegPopulator();
+
+			if( populator == null )
+			{
+				Collection defaultEntryList = (Collection)popEntriesMap.
+				                              get( getDefaultPopulator().
+				                              getUniqueId() );
+				defaultEntryList.add( entry );
+			}
+			else
+			{
+				Collection entryList = (Collection)popEntriesMap.
+				                       get( populator.getUniqueId() );
+				
+				if( entryList == null )
+					tracer.println( "Trying to save entry with logicalName = " +
+							        entry.getLogicalName() + 
+							        " and populator with" );
+				else
+					entryList.add( entry );
+			}
+		}
+
+		Exception exception = null;
+		popIterator = popMap.values().iterator();
+		while( popIterator.hasNext() )
+		{
+			JposRegPopulator populator = (JposRegPopulator)popIterator.next();
+			String popUniqueId = populator.getUniqueId();
+			Collection entryList = (Collection)popEntriesMap.get( popUniqueId );
+
+			try
+			{
+				if( popFileMap.get( populator.getUniqueId() ) != null )
+					populator.save( new Vector( entryList ).elements(),
+									(String)popFileMap.get( populator.getUniqueId() ) );
+				else
+					populator.save( new Vector( entryList ).elements() );
+			}
+			catch( Exception e )
+			{
+				exception = e;
+				tracer.println( "Error while saving to populator with unique ID:" +
+							    populator.getUniqueId() );
+			}
+		}
+
+		if( exception != null ) throw exception;
+	}
+
+    /**
+     * Tell the populator to save the current entries in the file specified using
+	 * the default JposRegPopulator
+     * @param entries an enumeration of JposEntry objects
+     * @param fileName the file name to save entries
+     * @throws java.lang.Exception if any error occurs while saving
+     */
+    public void save( Enumeration entries, String fileName ) throws Exception
+	{
+		getDefaultPopulator().save( entries, fileName );
+	}
+
+    /**
+     * Tell the populator to load the entries.  Looks for 2 multi-properties for the 
+	 * populator class and populator file name called:
+     * jpos.config.populator.class.0	 
+     * jpos.config.populator.file.0 	 
+	 * All entries are loaded by using the file name in the properties file for each
+	 * populator defined in the JposEntryProperties.
+     */
+    public void load()
+	{
+        JposProperties jposProperties = JposServiceLoader.getManager().getProperties();
+
+		JposProperties.MultiProperty populatorClassMultiProp = 
+		jposProperties.getMultiProperty( JposProperties.JPOS_CONFIG_POPULATOR_CLASS_MULTIPROP_NAME );
+
+		JposProperties.MultiProperty populatorFileMultiProp = 
+		jposProperties.getMultiProperty( JposProperties.JPOS_CONFIG_POPULATOR_FILE_MULTIPROP_NAME );
+
+		if( populatorClassMultiProp.getNumberOfProperties() == 0 )
+		{
+			tracer.println( "CompositeRegPopulator.load() w/o any defined multi-property" );
+			throw new RuntimeException( "CompositeRegPopulator.load() w/o any defined multi-property" );
+		}
+
+		Iterator popClasses = populatorClassMultiProp.getSortedPropertyNames();
+
+		String defaultPopName = (String)popClasses.next();
+		String defaultPopClass = populatorClassMultiProp.getPropertyString( defaultPopName );
+		int defaultPopClassNumber = populatorClassMultiProp.propertyNumber( defaultPopName );
+
+		JposRegPopulator defaultPopulator = createPopulator( defaultPopName, defaultPopClass );
+
+		if( populatorFileMultiProp != null && populatorFileMultiProp.getNumberOfProperties() > 0 )
+		{
+			String defaultPopFile = (String)populatorFileMultiProp.getPropertyString( defaultPopClassNumber );
+
+			if( defaultPopFile != null )
+			{
+				defaultPopulator.load( defaultPopFile );
+				lastLoadException = defaultPopulator.getLastLoadException();
+				popFileMap.put( defaultPopulator.getUniqueId(), defaultPopFile );
+			}
+			else
+			{
+				tracer.println( "Created default populator with name = " + defaultPopName + 
+											  " OK but populator file is null" );
+				defaultPopulator.load();
+				lastLoadException = defaultPopulator.getLastLoadException();
+			}
+		}
+		else
+		{
+			defaultPopulator.load();
+			lastLoadException = defaultPopulator.getLastLoadException();
+		}
+
+		if( defaultPopulator != null )
+			setDefaultPopulator( defaultPopulator );
+		else
+			tracer.println( "Did not add default populator by <name, className>: " +
+										  "<" + defaultPopName + ", " + defaultPopClass + ">" );
+		while( popClasses.hasNext() )
+		{
+			String popName = (String)popClasses.next();
+			String popClass = populatorClassMultiProp.getPropertyString( popName );
+			int popClassNumber = populatorClassMultiProp.propertyNumber( popName );
+
+			JposRegPopulator populator = createPopulator( popName, popClass );
+
+			if( populator != null )
+			{
+				if( populatorFileMultiProp != null && populatorFileMultiProp.getNumberOfProperties() > 0 )
+				{
+					String popFile = (String)populatorFileMultiProp.getPropertyString( popClassNumber );
+					populator.load( popFile );
+					popFileMap.put( populator.getUniqueId(), popFile );
+				}
+				else
+				{
+					tracer.println( "Created populator with name = " + popName + 
+												  " OK but populator file is null" );
+					populator.load();
+					lastLoadException = populator.getLastLoadException();
+				}
+
+                add( populator );
+			}
+			else
+				tracer.println( "Did not add populator by <name, className>: " +
+											  "<" + popName + ", " + popClass + ">" );
+		}
+	}
+
+    /**
+     * Loads the entries specified in the fileName for the default populator
+     * @param fileName the entries file name
+     */
+    public void load( String fileName ) { getDefaultPopulator().load( fileName ); }
+
+    /** @return the URL pointing to the entries file loaded or saved */
+    public URL getEntriesURL() { return this.getDefaultPopulator().getEntriesURL(); }
+
+    /** 
+	 * @return an Enumeration of JposEntry objects 
+	 * NOTE: this method is O(nm) where n == number of populators and m == average
+	 * number of entries in populator.  Could do better by keeping more data structure
+	 * but not worth it if n and m are small (as expected in typical system)
+	 */
+    public Enumeration getEntries()
+	{
+		Vector entryVector = new Vector();
+		Iterator populators = getPopulators();
+
+		while( populators.hasNext() )
+		{
+			JposRegPopulator pop = (JposRegPopulator)populators.next();
+
+			Enumeration entries = pop.getEntries();
+			while( entries.hasMoreElements() )
+				entryVector.add( entries.nextElement() );
+		}
+
+		return entryVector.elements();
+	}
+
+	/**
+	 * @retun true if this populator is a composite populator or false otherwise
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public boolean isComposite() { return true; }
+
+	/**
+	 * @return the name of this populator.  This should be a short descriptive name
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public String getName() { return COMPOSITE_REG_POPULATOR_STRING; }
+
+	/**
+	 * @return the last exception (if any) during the last load or null if no exception occurred
+	 * @since 2.0.0
+	 */
+	public Exception getLastLoadException() { return lastLoadException; }
+
+	/**
+	 * @return a String representation of this JposRegPopulator
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public String toString() { return getName(); }
+
+    //-------------------------------------------------------------------------
+    // Public methods
+    //
+
+	/** @return the default JposRegPopulator */
+	public JposRegPopulator getDefaultPopulator() { return defaultPop; }
+
+    /**
+	 * Adds this JposRegPopulator to the composite
+	 * @param populator adds the populator to the composite reg populator.  Does nothing
+	 * if the popualator already is in the composite
+	 */
+	public void add( JposRegPopulator populator ) { popMap.put( populator.getUniqueId(), populator ); }
+
+	/**
+	 * Removes this JposRegPopulator from the composite
+	 * @param populator removes the populator to the composite reg populator
+	 */
+	public void remove( JposRegPopulator populator ) { popMap.remove( populator.getUniqueId() ); }
+
+	/** @return an iterator over all populators in this composite */
+	public Iterator getPopulators() { return popMap.values().iterator(); }
+
+	/** 
+	 * @return the populator with unique ID passed
+	 * @param uniqueId the populator unique ID
+	 * @see jpos.config.JposRegPopulator#getUniqueId()
+	 */
+	public JposRegPopulator getPopulator( String uniqueId ) 
+	{ return (JposRegPopulator)popMap.get( uniqueId ); }
+
+	/** @return the number of populator in this composite */
+	public int size() { return popMap.size(); }
+
+    //-------------------------------------------------------------------------
+    // Instance variables
+    //
+
+	private HashMap popMap = new HashMap();
+	private HashMap popFileMap = new HashMap();
+	private JposRegPopulator defaultPop = null;
+	private Exception lastLoadException = null;
+	
+	private Tracer tracer = TracerFactory.getInstance().
+							 createTracer( "DefaultCompositeRegPopulator" );
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/config/JposConfigException.java b/org.eclipse.osbp.fork.jpos/src/jpos/config/JposConfigException.java
new file mode 100644
index 0000000..b432aff
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/config/JposConfigException.java
@@ -0,0 +1,54 @@
+package jpos.config;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import jpos.JposException;
+
+/**
+ * Defines an Exception class for JCL config related classes/interfaces and 
+ * implementing classes
+ * @since 2.0.0
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public class JposConfigException extends JposException
+{
+	//-------------------------------------------------------------------------
+	// Ctor(s)
+	// 
+	
+	/**
+	 * Creates a JposConfigException with the description passed
+	 * @param description the description String
+	 */
+    public JposConfigException( String description )
+    {
+        super( 0, description );
+    }
+
+	/**
+	 * Creates a JposConfigException with the description passed and 
+	 * the original exception that caused this one
+	 * @param description the description String
+	 * @param origException the exception that originally caused this one
+	 */
+    public JposConfigException( String description, Exception origException )
+    {
+        super( 0, description, origException );
+    }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/config/JposEntry.java b/org.eclipse.osbp.fork.jpos/src/jpos/config/JposEntry.java
new file mode 100644
index 0000000..5bcc185
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/config/JposEntry.java
@@ -0,0 +1,321 @@
+package jpos.config;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.io.Serializable;
+
+import java.util.Enumeration;
+import java.util.Iterator;
+
+/**
+ * Defines the minimal set of methods for a JposEntry object
+ * It allows the entries to contain properties <key, value> pairs
+ * The key being a String and the value any serializable Java objects
+ * NOTE: JposEntry implementation can be easily implemented using a 
+ * java.util.Hashtable
+ * @since 0.1 (Philly 99 meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface JposEntry extends Serializable, Comparable
+{
+    /**
+     * @return count of number of properties 
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public int getPropertyCount();
+
+    /**
+     * @return an enumerator for the properties names 
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public Enumeration getPropertyNames();
+
+    /**
+     * @return true if there is a property by the name specified
+     * @since 0.1 (Philly 99 meeting)
+     * @param propName the property name String
+     */
+    public boolean hasPropertyWithName( String propName );
+
+    /**
+     * @return true if there is a property by the value specified
+     * <p><b>NOTE: Object.equals method will be used to compare</b></p>
+     * @param propValue the property's value Object
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public boolean hasPropertyWithValue( Object propValue );
+
+    /** 
+     * @return the property's value Object
+     * @param propName the property's name String
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public Object getPropertyValue( String propName );
+
+    /** 
+     * @return the property's type
+     * @param propName the property's name String
+     * @since 2.0.0
+     */
+    public Class getPropertyType( String propName );
+
+    /**
+     * Modifies the property value of the property passed
+	 * @return the oldPropValue or null if this property does not exist
+     * @param propName the property name
+	 * @param propValue the new property value
+	 * @since 1.3 (Tokyo 2001 meeting)
+	 * @throws java.lang.IllegalArgumentException if the propName or propValue is null
+     */
+    public Object modifyPropertyValue( String propName, Object propValue ) throws IllegalArgumentException;
+
+    /**
+     * Adds a property to the JposEntry object.
+     * NOTE: any property with the same name gets overlaid
+     * @param propName the name of this property (should be unique per property)
+     * @param propValue the properties value Object
+     * @since 0.1 (Philly 99 meeting)
+	 * @throws java.lang.IllegalArgumentException if the propName or propValue is null
+     */
+    public Object addProperty( String propName, Object propValue ) throws IllegalArgumentException;
+
+    /**
+     * Looks for a property with name specified and removes it
+     * @param propName the name String of the property to remove
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public Object removeProperty( String propName );
+
+    /**
+     * @return true if the two JposEntries have the same properties 
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public boolean equals( JposEntry otherEntry );
+
+	/**
+	 * @return the JposRegPopulator that loads/saves this entry.  If null the default
+	 * populator is used
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public JposRegPopulator getRegPopulator();
+
+	/**
+	 * @return the logical name for this JposEntry.  This is a shortcut for easily getting
+	 * the logical name vs getting a property and passing the logical name constant
+	 * @see jpos.config.JposEntry#getPropertyValue
+	 * @see jpos.config.JposEntry#LOGICAL_NAME_PROP_NAME
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public String getLogicalName();
+
+	/**
+	 * Returns a JposEntry.Prop with name specified.
+	 * <p><b>
+	 * Changes to that property object are not reflected in this entry.  You must
+	 * apply the changes to the property to the entry by calling modifyProp() method
+	 * </b></p>
+	 * @return the JposEntry.Prop with name specified or null if no such property exist
+	 * @param propName the property name
+	 * @since 2.0.0
+	 */
+	public JposEntry.Prop getProp( String propName );
+
+	/**
+	 * Returns an Iterator of JposEntry.Prop in this entry
+	 * <p><b>
+	 * Changes to any of the returned property object are not reflected in this entry.  
+	 * You must apply the changes to the property to the entry by calling modifyProp() method
+	 * </b></p>
+	 * @return an Iterator over the properties in this JposEntry as JposEntry.Prop objects
+	 * @since 1.3 (Washington DC 2001)
+	 */
+	public Iterator getProps();
+
+	/**
+	 * Adds a new property
+	 * @param prop the JposEntry.Prop to add
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 * @throws java.lang.IllegalArgumentException if the prop is null
+	 */
+	public void add( JposEntry.Prop prop ) throws IllegalArgumentException;
+
+    /**
+     * Looks for a property with name specified and removes it.  If none exist then 
+	 * does nothing and return null
+	 * @return the value for the name passed
+     * @param name the name String of the property to remove
+     * @since 0.1 (Philly 99 meeting)
+     */
+	public void remove( JposEntry.Prop prop );
+
+	/**
+	 * Modifies the property with name of property passed with the new value if
+	 * that property currently exist in the entry otherwise does nothing
+	 * @param prop the JposEntry.Prop to modify
+	 * @since 2.0.0
+	 * @throws java.lang.IllegalArgumentException if the prop is null
+	 */
+	public void modify( JposEntry.Prop prop ) throws IllegalArgumentException;
+
+	/** 
+	 * @return true if this entry has the property passed
+	 * @param prop the JposEntry.Prop to check for
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public boolean hasProp( JposEntry.Prop prop );
+
+	/** 
+	 * @return a JposEntry.Prop object created with the <name, value, type> tripplet
+	 * passed as arguments
+	 * @param propName the property name
+	 * @param propValue the property value
+	 * @param propType the property type (valid for this value)
+	 * @throws jpos.config.JposConfigException if any of the argument is null or the
+	 * property value and type mismatch or this is not a valid property type
+	 * @see jpos.config.JposEntryConst#PROP_TYPES
+	 * @since 2.0.0
+	 */
+	public JposEntry.Prop createProp( String propName, Object propValue, Class propType ) throws JposConfigException;
+
+	//-------------------------------------------------------------------------
+	// Inner interfaces
+	//
+
+	/**
+	 * Inner interface to represent a property of a JposEntry
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 * @since 1.3 (Washington DC 2001)
+	 */
+	public interface Prop extends Comparable
+	{
+		/** @return the name of this property */
+		public String getName();
+
+		/** @return the value of this property (the value is returned as an Object) */
+		public Object getValue();
+
+		/** @return the value of this property as a String */
+		public String getValueAsString();
+
+		/**
+		 * Returns the Class object that is the type of this property value
+		 * possible values returned are the java.lang wrapper classes for the
+		 * primitive types e.g. Integer, Byte, Boolean, ... 
+		 * @return the type of this property as a java.lang.Class object 
+		 */
+		public Class getType();
+
+		/** 
+		 * Sets the name of this property 
+		 * @param s the String object
+		 * @throws java.lang.IllegalArgumentException if the value is null
+		 */
+		public void setName( String s ) throws IllegalArgumentException;
+
+		/** 
+		 * Sets the value of this property (String).  Also sets its Type.
+		 * <p><b>This is the default type of any property</b></p>
+		 * @param objValue the object value
+		 * @throws java.lang.IllegalArgumentException if the value is null or
+		 * that this is not a valid typed property value
+		 */
+		public void setValue( Object objValue ) throws IllegalArgumentException;
+
+		/** 
+		 * @return true if the property is of the type specified by the Class
+		 * object passed
+		 * @param type the Class object
+		 */
+		public boolean isOfType( Class type );
+
+		/** 
+		 * @return true if this and otherProp have same name and value
+		 * @param otherProp the other JposEntry.Prop
+		 */
+		public boolean equals( Object otherProp );
+
+		/** @return a new copy of this JposEntry.Prop object */
+		public JposEntry.Prop copy();
+	}
+
+    //-------------------------------------------------------------------------
+    // Interface constants
+    //
+
+    /**
+     * JposEntry property name defining the JposServiceInstanceFactory class for this JposEntry 
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public static final String SI_FACTORY_CLASS_PROP_NAME = "serviceInstanceFactoryClass";
+
+    /**
+     * JposEntry property name that must be defined by all JposEntry objects used to create services
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public static final String LOGICAL_NAME_PROP_NAME = "logicalName";
+
+    /**
+     * JposEntry property name that specifies the fully qualified class name for the service
+     * @since 1.2 (NY 2K meeting)
+     */
+    public static final String SERVICE_CLASS_PROP_NAME = "serviceClass";
+
+    /**
+     * The vendor name string
+     * @since 1.2 (NY 2K meeting)
+     */
+    public static final String VENDOR_NAME_PROP_NAME = "vendorName";
+
+    /**
+     * The vendor URL string
+     * @since 1.2 (NY 2K meeting)
+     */
+    public static final String VENDOR_URL_PROP_NAME = "vendorURL";
+
+    /**
+     * The device category for the service must be one of JavaPOS defined categories
+     * i.e. CashDrawer, CashChanger, MSR, MICR, ...
+     * @since 1.2 (NY 2K meeting)
+     */
+    public static final String DEVICE_CATEGORY_PROP_NAME = "deviceCategory";
+
+    /**
+     * The JavaPOS version supported by this service (i.e. 1.4, 1.5...)
+     * @since 1.2 (NY 2K meeting)
+     */
+    public static final String JPOS_VERSION_PROP_NAME = "jposVersion";
+
+    /**
+     * A short name for this product
+     * @since 1.2 (NY 2K meeting)
+     */
+    public static final String PRODUCT_NAME_PROP_NAME = "productName";
+
+    /**
+     * A string description for this product
+     * @since 1.2 (NY 2K meeting)
+     */
+    public static final String PRODUCT_DESCRIPTION_PROP_NAME = "productDescription";
+
+    /**
+     * The product's URL string
+     * @since 1.2 (NY 2K meeting)
+     */
+    public static final String PRODUCT_URL_PROP_NAME = "productURL";
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/config/JposEntryConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/config/JposEntryConst.java
new file mode 100644
index 0000000..b81fa1e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/config/JposEntryConst.java
@@ -0,0 +1,168 @@
+package jpos.config;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.io.Serializable;
+
+/**
+ * Defines constants for standard properties names and values used to create
+ * JposEntries...
+ * @since 1.3 (Berlin 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface JposEntryConst extends RS232Const, Serializable
+{
+    //-------------------------------------------------------------------------
+    // Required properties array
+    //
+
+	/**
+	 * Array of all required properties
+	 * @since 1.3 (Washington 2001 meeting)
+	 */
+	public static final String[] REQUIRED_PROPS = 
+	                               { 
+	                               	 JposEntry.SI_FACTORY_CLASS_PROP_NAME,
+                                     JposEntry.LOGICAL_NAME_PROP_NAME,
+                                     JposEntry.SERVICE_CLASS_PROP_NAME,
+                                     JposEntry.VENDOR_NAME_PROP_NAME,
+                                     JposEntry.VENDOR_URL_PROP_NAME,
+                                     JposEntry.DEVICE_CATEGORY_PROP_NAME,
+                                     JposEntry.JPOS_VERSION_PROP_NAME,
+                                     JposEntry.PRODUCT_NAME_PROP_NAME,
+                                     JposEntry.PRODUCT_DESCRIPTION_PROP_NAME,
+                                     JposEntry.PRODUCT_URL_PROP_NAME 
+                                   };
+
+    //-------------------------------------------------------------------------
+    // Required properties default values
+    //
+
+	public static final String LOGICAL_NAME_DEFAULT_PROP_VALUE = 
+	                             "UnknownDevice";
+	                             
+	public static final String SI_FACTORY_CLASS_DEFAULT_PROP_VALUE = 
+	                             "UnknownServiceInstanceFactoryClass";
+	                             
+	public static final String SERVICE_CLASS_DEFAULT_PROP_VALUE = 
+	                             "UnknownServiceClass";
+	                             
+	public static final String DEVICE_CATEGORY_DEFAULT_PROP_VALUE = 
+								 "CashDrawer";
+	
+	public static final String JPOS_VERSION_DEFAULT_PROP_VALUE = "1.5";
+	
+	public static final String VENDOR_NAME_DEFAULT_PROP_VALUE = 
+								 "Unknown Vendor Name";
+	
+	public static final String VENDOR_URL_DEFAULT_PROP_VALUE = 
+								 "http://www.UnknownVerdorURL.com";
+	
+	public static final String PRODUCT_NAME_DEFAULT_PROP_VALUE = 
+								 "Unknown Product Name";
+	
+	public static final String PRODUCT_URL_DEFAULT_PROP_VALUE = 
+								 "http://www.UnknownProductURL.com";
+	
+	public static final String PRODUCT_DESCRIPTION_DEFAULT_PROP_VALUE = 
+								 "Unknown Product Description";
+
+	/** @return an array of all compatible JavaPOS version values */
+	public static final String[] JPOS_VERSION_PROPS = 
+								   { "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8" };
+
+    //-------------------------------------------------------------------------
+    // Standard properties name and values
+    //
+
+    //Property names
+
+    /** Required property indicating the BUS used for this JposEntry */
+    public static final String DEVICE_BUS_PROP_NAME = "deviceBus";
+
+    //Property values
+
+    /** Property value for deviceBus for RS232 */
+    public static final String RS232_DEVICE_BUS = "RS232";
+
+    /** Property value for deviceBus for standard Parallel ports */
+    public static final String PARALLEL_DEVICE_BUS = "Parallel";
+
+    /** Property value for deviceBus for USB */
+    public static final String USB_DEVICE_BUS = "USB";
+
+    /** Property value for deviceBus for RS485 (or SIO) */
+    public static final String RS485_DEVICE_BUS = "RS485";
+
+    /** Property value for deviceBus for HID (or Human Inferface Device) */
+    public static final String HID_DEVICE_BUS = "HID";
+
+    /** Property value for deviceBus for proprietary buses */
+    public static final String PROPRIETARY_DEVICE_BUS = "Proprietary";
+
+    /** Property value for deviceBus for other "Unknown" buses */
+    public static final String UNKNOWN_DEVICE_BUS = "Unknown";
+
+    /** Array of all the deviceBus property values */
+    public static final String[] DEVICE_BUS_VALUES = 
+                                   { 
+                                   	 RS232_DEVICE_BUS, 
+                                   	 PARALLEL_DEVICE_BUS,
+									 USB_DEVICE_BUS, 
+									 RS485_DEVICE_BUS, 
+									 HID_DEVICE_BUS,
+									 PROPRIETARY_DEVICE_BUS, 
+									 UNKNOWN_DEVICE_BUS 
+								   };
+								   
+	//-------------------------------------------------------------------------
+	// Property types allowed
+	//
+
+	/** The default JposEntry property type */
+	public static final Class DEFAULT_PROP_TYPE = String.class;
+
+	/** Array of all the property types allowed for a JposEntry property */
+	public static final Class[] PROP_TYPES = 
+								  { 
+								  	String.class, 
+								  	Boolean.class, 
+								  	Byte.class, 
+								  	Character.class, 
+								  	Double.class, 
+								  	Float.class,
+                                    Integer.class, 
+                                    Long.class, 
+                                    Short.class 
+                                  };
+	
+	/** Array of all the property types allowed for a JposEntry property */
+	public static final String[] PROP_TYPES_SHORT_NAMES = 
+								   { 
+								   	 "String", 
+								   	 "Boolean", 
+								   	 "Byte", 
+								   	 "Character", 
+							     	 "Double", 
+							     	 "Float", 
+							     	 "Integer", 
+							     	 "Long", 
+							     	 "Short" 
+							       };
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/config/JposEntryRegistry.java b/org.eclipse.osbp.fork.jpos/src/jpos/config/JposEntryRegistry.java
new file mode 100644
index 0000000..030617c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/config/JposEntryRegistry.java
@@ -0,0 +1,148 @@
+package jpos.config;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.util.Enumeration;
+import java.io.File;
+
+/**
+ * This interface defines the populator used by the service connection
+ * and the JposServiceFactory to access the JavaPOS JposEntry objects.
+ * It also allows a consistent place to aggregates the defined JposEntry
+ * and allows for dynamic updates of the current set of JposEntry objects.
+ * @since 0.1 (Philly 99 meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface JposEntryRegistry
+{
+    /**
+     * @return true if there is an JposEntry with the specified logical name
+     * @param logicalName the logical name for the service
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public boolean hasJposEntry( String logicalName );
+
+    /**
+     * @return an enumeration of JposEntry objects 
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public Enumeration getEntries();
+
+    /**
+     * @return the JposEntry for the logicalName specified
+     * @param logicalName the logical name of the JposEntry to find
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public JposEntry getJposEntry( String logicalName );
+
+    /**
+     * Add an JposEntry for the service with logical name specified
+     * @param logicalName the logicalName of the service
+	 * @param entry the JposEntry to add
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public void addJposEntry( String logicalName, JposEntry entry );
+
+    /**
+     * Add an JposEntry for the service.  The logical name is obtained from the entry
+	 * @param entry the JposEntry to add
+	 * @see jpos.config.JposEntry#getLogicalName()
+     * @since 1.3 (Washington DC 2001 meeting)
+     */
+    public void addJposEntry( JposEntry entry );
+
+    /**
+     * Removes the specified JposEntry 
+     * @param entry the entry to remove
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public void removeJposEntry( JposEntry entry );
+
+    /**
+     * Removes the JposEntry with the logicalName specified 
+     * @param logicalName the JposEntry's logical name
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public void removeJposEntry( String logicalName );
+
+    /**
+     * Modify the JposEntry with logicalName with the new entry indicated
+     * @param logicalName the JposEntry's logical name
+     * @param newEntry the new JposEntry
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public void modifyJposEntry( String logicalName, JposEntry newEntry );
+
+    /**
+     * Adds a new JposEntryRegistryListener to the list of listeners
+     * @param l the JposEntryRegistryListener object
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public void addJposEntryRegistryListener( JposEntryRegistryListener l );
+
+    /**
+     * Removes a new JposEntryRegistryListener to the list of listeners
+     * @param l the JposEntryRegistryListener object
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public void removeJposEntryRegistryListener( JposEntryRegistryListener l );
+
+    /**
+     * Tell the JposEntryRegistry to save the current entries 
+     * NOTE: the actual implementation will save it in dependent manner
+     * @since 0.1 (Philly 99 meeting)
+     * @throws java.lang.Exception if any error occurs while saving
+     */
+    public void save() throws Exception;
+
+    /**
+     * Tell the JposEntryRegistry to save the current entries to the file 
+     * specified.  Depending on the current JposEntryPopulator the file might
+     * be an XML or serialized or other file.
+     * @since 2.1.0
+     * @throws java.lang.Exception if any error occurs while saving or if the
+     * current populator does not support saving in a file
+     */
+    public void saveToFile( File file ) throws Exception;
+
+    /**
+     * Loads the JposEntryRegistry using the current populator
+     * NOTE: if no entries are found or an error occurs then the registry is empty
+     * @since 1.2 (NY 2K meeting)
+     */
+    public void load();
+
+    /**
+     * @return the JposRegPopulator for this registry
+     * @since 1.2 (NY 2K meeting)
+     */
+    public JposRegPopulator getRegPopulator();
+
+	/**
+	 * @return the current size of the registry 
+	 * @since 1.3 (Tokyo 2001 meeting)
+	 */
+	public int getSize();
+
+	/**
+	 * @return true if the registry has already been loaded or false otherwise
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public boolean isLoaded();
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/config/JposEntryRegistryEvent.java b/org.eclipse.osbp.fork.jpos/src/jpos/config/JposEntryRegistryEvent.java
new file mode 100644
index 0000000..e4fa1f0
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/config/JposEntryRegistryEvent.java
@@ -0,0 +1,53 @@
+package jpos.config;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.util.*;
+
+/**
+ * Event class for the JposEntryRegistry
+ * @since 0.1 (Philly 99 meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public class JposEntryRegistryEvent extends EventObject
+{
+    /**
+     * Creates a new event
+     * @param source the source of this event
+     * @param entry the JposEntry associated with the event
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public JposEntryRegistryEvent( Object source, JposEntry entry )
+    {
+        super( source );
+        jposEntry = entry;
+    }
+
+    /**
+     * @return the JposEntry for this event
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public JposEntry getJposEntry() { return jposEntry; }
+
+    //--------------------------------------------------------------------------
+    // Instance variables
+    //
+
+    private JposEntry jposEntry = null;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/config/JposEntryRegistryListener.java b/org.eclipse.osbp.fork.jpos/src/jpos/config/JposEntryRegistryListener.java
new file mode 100644
index 0000000..bed3345
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/config/JposEntryRegistryListener.java
@@ -0,0 +1,50 @@
+package jpos.config;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.util.*;
+
+/**
+ * Listener interface to implement when registering for JposEntryEvents
+ * @since 0.1 (Philly 99 meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface JposEntryRegistryListener extends EventListener
+{
+    /**
+     * Indicates that a new JposEntry was added to the registry
+     * @param event the JposEntryEvent object
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public void jposEntryAdded( JposEntryRegistryEvent event );
+
+    /**
+     * Indicates that a JposEntry was removed from the registry
+     * @param event the JposEntryEvent object
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public void jposEntryRemoved( JposEntryRegistryEvent event );
+
+    /**
+     * Indicates that a JposEntry was modified from the registry
+     * @param event the JposEntryEvent object
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public void jposEntryModified( JposEntryRegistryEvent event );
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/config/JposRegPopulator.java b/org.eclipse.osbp.fork.jpos/src/jpos/config/JposRegPopulator.java
new file mode 100644
index 0000000..df811ac
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/config/JposRegPopulator.java
@@ -0,0 +1,111 @@
+package jpos.config;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.util.Enumeration;
+import java.net.URL;
+
+/**
+ * Defines an interface to load, save JposEntries
+ * @since 1.2 (NY 2K 99 meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface JposRegPopulator 
+{
+    //-------------------------------------------------------------------------
+    // Public methods
+    //
+
+	/**
+	 * @return a unique String ID for this JposRegPopulator instance
+	 * Can be implemented in terms of the getClassName() method
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public String getUniqueId();
+
+	/**
+	 * @return the fully qualified class name implementing the 
+	 * JposRegPopulator interface
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public String getClassName();
+
+    /**
+     * Tell the populator to save the current entries 
+     * @param entries an enumeration of JposEntry objects
+     * @since 1.2 (NY 2K meeting)
+     * @throws java.lang.Exception if any error occurs while saving
+     */
+    public void save( Enumeration entries ) throws Exception;
+
+    /**
+     * Tell the populator to save the current entries in the file specified 
+     * @param entries an enumeration of JposEntry objects
+     * @param fileName the file name to save entries
+     * @since 1.3 (SF 2K meeting)
+     * @throws java.lang.Exception if any error occurs while saving
+     */
+    public void save( Enumeration entries, String fileName ) throws Exception;
+
+    /**
+     * Tell the populator to load the entries 
+     * @since 1.2 (NY 2K meeting)
+     */
+    public void load();
+
+    /**
+     * Loads the entries specified in the fileName
+     * @param fileName the entries file name
+     * @since 1.3 (SF 2K meeting)
+     */
+    public void load( String fileName );
+
+	/**
+	 * @return the last exception (if any) during the last load or null 
+	 * if no exception occurred
+	 * @since 2.0.0
+	 */
+	public Exception getLastLoadException();
+
+    /**
+     * @return the URL pointing to the entries file loaded or saved
+     * @since 1.2 (NY 2K meeting)
+     */
+    public URL getEntriesURL();
+
+    /**
+     * @return an Enumeration of JposEntry objects
+     * @since 1.2 (NY 2K meeting)
+     */
+    public Enumeration getEntries();
+
+	/**
+	 * @retun true if this populator is a composite populator or false 
+	 * otherwise
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public boolean isComposite();
+
+	/**
+	 * @return the name of this populator.  This should be a short 
+	 * descriptive name
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public String getName();
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/config/RS232Const.java b/org.eclipse.osbp.fork.jpos/src/jpos/config/RS232Const.java
new file mode 100644
index 0000000..c92f95b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/config/RS232Const.java
@@ -0,0 +1,158 @@
+package jpos.config;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Defines constants for RS232 buses
+ * @since 1.3 (Washington DC 2001 meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface RS232Const
+{
+    //-------------------------------------------------------------------------
+    // RS232 properties name and values
+    //
+
+    //Property names
+
+    /** The RS232 "portName" property (type == String) */
+    public static final String RS232_PORT_NAME_PROP_NAME = "portName";
+    
+    /** The RS232 "baudRate" property (type == int [...]) */
+    public static final String RS232_BAUD_RATE_PROP_NAME = "baudRate";
+
+    /** The RS232 "dataBits" property (type == int list [4, 5, 6, 7, 8])  */
+    public static final String RS232_DATA_BITS_PROP_NAME = "dataBits";
+
+    /** The RS232 "parity" property (type == String list [Even, Odd, None, Mark, Space]) */
+    public static final String RS232_PARITY_PROP_NAME = "parity";
+
+    /** The RS232 "stopBits" property (type == String list [1, 1.5, 2])  */
+    public static final String RS232_STOP_BITS_PROP_NAME = "stopBits";
+
+    /** The RS232 "flowControl" property (type == String list [Xon/Xoff, Hardware, None]) */
+    public static final String RS232_FLOW_CONTROL_PROP_NAME = "flowControl";
+
+	/**
+	 * Array of all RS232 properties
+	 * @since 1.3 (Washington 2001 meeting)
+	 */
+	public static final String[] RS232_PROPS = { RS232_PORT_NAME_PROP_NAME,
+                                                 RS232_BAUD_RATE_PROP_NAME,
+                                                 RS232_DATA_BITS_PROP_NAME,
+                                                 RS232_PARITY_PROP_NAME,
+                                                 RS232_STOP_BITS_PROP_NAME,
+                                                 RS232_FLOW_CONTROL_PROP_NAME };
+
+    //Property values
+
+    /** The RS232 "baudRate" property values as Integer objects (typical values) */
+    public static final String[] RS232_BAUD_RATE_VALUES = { "2400", "4800", "7200",  "9600",
+                                                            "14400", "19200", "38400", "57600",
+                                                            "115200", "75", "110", "134", "150",
+															"300", "600", "1200", "1800" };
+	
+	/** The RS232 "dataBits" property value of 4 */
+    public static final String RS232_DATA_BITS_4 = "4";
+
+    /** The RS232 "dataBits" property value of 5 */
+    public static final String RS232_DATA_BITS_5 = "5";
+
+    /** The RS232 "dataBits" property value of 6 */
+    public static final String RS232_DATA_BITS_6 = "6";
+
+    /** The RS232 "dataBits" property value of 7 */
+    public static final String RS232_DATA_BITS_7 = "7";
+
+    /** The RS232 "dataBits" property value of 8 */
+    public static final String RS232_DATA_BITS_8 = "8";
+
+    /** The RS232 "dataBits" property values as Integer objects */
+    public static final String[] RS232_DATA_BITS_VALUES = { RS232_DATA_BITS_8,
+                                                            RS232_DATA_BITS_7,
+                                                            RS232_DATA_BITS_6,
+                                                            RS232_DATA_BITS_5,
+                                                            RS232_DATA_BITS_4 };
+
+    /** The RS232 "parity" property value of "Even" */
+    public static final String RS232_PARITY_EVEN = "Even";
+
+    /** The RS232 "parity" property value of "Odd" */
+    public static final String RS232_PARITY_ODD = "Odd";
+
+    /** The RS232 "parity" property value of "None" */
+    public static final String RS232_PARITY_NONE = "None";
+
+    /** The RS232 "parity" property value of "Mark" */
+    public static final String RS232_PARITY_MARK = "Mark";
+
+    /** The RS232 "parity" property value of "Space" */
+    public static final String RS232_PARITY_SPACE = "Space";
+
+    /** The RS232 "parity" property values as String objects */
+    public static final String[] RS232_PARITY_VALUES = { RS232_PARITY_NONE, RS232_PARITY_EVEN, 
+														 RS232_PARITY_ODD, RS232_PARITY_MARK,
+                                                         RS232_PARITY_SPACE };
+
+    /** The RS232 "stopBits" property value of 1 */
+    public static final String RS232_STOP_BITS_1 = "1";
+
+    /** The RS232 "stopBits" property value of 1.5 */
+    public static final String RS232_STOP_BITS_1_5 = "1.5";
+
+    /** The RS232 "stopBits" property value of 2 */
+    public static final String RS232_STOP_BITS_2 = "2";
+
+    /** The RS232 "stopBits" property values as Strin objects */
+    public static final String[] RS232_STOP_BITS_VALUES = { RS232_STOP_BITS_1, RS232_STOP_BITS_1_5,
+                                                            RS232_STOP_BITS_2 };
+
+    /** The RS232 "flowControl" property value of "Xon/Xoff" */
+    public static final String RS232_FLOW_CONTROL_XON_XOFF = "Xon/Xoff";
+
+    /** The RS232 "flowControl" property value of "Hardware" */
+    public static final String RS232_FLOW_CONTROL_HARDWARE = "Hardware";
+
+    /** The RS232 "flowControl" property value of "None" */
+    public static final String RS232_FLOW_CONTROL_NONE = "None";
+
+    /** The RS232 "flowControl" property values as Strin objects */
+    public static final String[] RS232_FLOW_CONTROL_VALUES = { RS232_FLOW_CONTROL_NONE,
+															   RS232_FLOW_CONTROL_XON_XOFF,
+                                                               RS232_FLOW_CONTROL_HARDWARE };
+	//Default RS232 property values
+	
+	/** The RS232 "portName" property default value */
+	public static final String DEFAULT_RS232_PORT_NAME_VALUE = "";
+
+	/** The RS232 "baudRate" property default value (type == int [...]) */
+	public static final String DEFAULT_RS232_BAUD_RATE_VALUE = "9600";
+
+	/** The RS232 "dataBits" property default value (type == int list [4, 5, 6, 7, 8])  */
+	public static final String DEFAULT_RS232_DATA_BITS_VALUE= "8";
+
+	/** The RS232 "parity" property default value (type == String list [Even, Odd, None, Mark, Space]) */
+	public static final String DEFAULT_RS232_PARITY_VALUE = RS232_FLOW_CONTROL_NONE;
+
+	/** The RS232 "stopBits" property default value (type == String list [1, 1.5, 2])  */
+	public static final String DEFAULT_RS232_STOP_BITS_VALUE = RS232_STOP_BITS_1;
+
+	/** The RS232 "flowControl" property default value (type == String list [Xon/Xoff, Hardware, None]) */
+	public static final String DEFAULT_RS232_FLOW_CONTROL_VALUE = RS232_FLOW_CONTROL_XON_XOFF;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/config/Version.java b/org.eclipse.osbp.fork.jpos/src/jpos/config/Version.java
new file mode 100644
index 0000000..ad4c1b1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/config/Version.java
@@ -0,0 +1,47 @@
+package jpos.config;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Simple Version class indicating that prints out the curent version of the JCL
+ * NOTE: This class indicates the same version number as the jpos.loader.Version
+ *       and is added as a convinience
+ * @since 1.2 (NY 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public final class Version extends Object
+{
+    /**
+     * Main entry point for the Version application
+     * @param args a String[] of arguments
+     * @since 1.2 (NY 2K meeting)
+     */
+    public static void main( String[] args )
+    {
+        System.out.println( "JavaPOS jpos.config/loader (JCL) version " + 
+        					jpos.loader.Version.getVersionString() );
+    }
+
+    /**
+     * @return a String of the version number of the JCL
+     * @since 1.2 (NY 2K meeting)
+     */
+    public static String getVersionString() 
+    { return jpos.loader.Version.getVersionString(); }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/AbstractRegPopulator.java b/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/AbstractRegPopulator.java
new file mode 100644
index 0000000..926cecb
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/AbstractRegPopulator.java
@@ -0,0 +1,477 @@
+package jpos.config.simple;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.io.*;
+import java.util.*;
+import java.util.zip.*;
+import java.net.URL;
+
+import jpos.config.*;
+import jpos.loader.JposServiceLoader;
+import jpos.util.JposProperties;
+import jpos.util.tracing.Tracer;
+import jpos.util.tracing.TracerFactory;
+
+/**
+ * Common abstract superclass to help in the implementation of the 
+ * JposRegPopulator
+ * @see jpos.util.JposProperties#JPOS_REG_POPULATOR_CLASS_PROP_NAME
+ * @since 1.2 (NY 2K 99 meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public abstract class AbstractRegPopulator extends Object 
+											 implements JposRegPopulator 
+{
+    //-------------------------------------------------------------------------
+    // Ctor(s)
+    //
+
+	/**
+	 * Creates a AbstractRegPopulator and sets the uniqueId with the string 
+	 * passed
+	 * @param id the String ID
+	 * @since 1.3 (Washington DC 20001)
+	 */
+	public AbstractRegPopulator( String id ) { setUniqueId( id ); }
+
+    //-------------------------------------------------------------------------
+    // Public abstract methods
+    //
+
+    /**
+     * Tell the populator to save the current entries 
+     * @param entries an enumeration of JposEntry objects
+     * @since 1.2 (NY 2K meeting)
+     * @throws java.lang.Exception if any error occurs while saving
+     */
+    public abstract void save( Enumeration entries ) throws Exception;
+
+    /**
+     * Tell the populator to save the current entries in the file specified 
+     * @param entries an enumeration of JposEntry objects
+     * @param fileName the file name to save entries
+     * @since 1.3 (SF 2K meeting)
+     * @throws java.lang.Exception if any error occurs while saving
+     */
+    public abstract void save( Enumeration entries, String fileName ) 
+    				  throws Exception;
+
+    /**
+     * Tell the populator to load the entries 
+     * @since 1.2 (NY 2K meeting)
+     */
+    public abstract void load();
+
+
+    /**
+     * Loads the entries specified in the fileName
+     * @param fileName the entries file name
+     * @since 1.3 (SF 2K meeting)
+     */
+    public abstract void load( String fileName );
+
+    /**
+     * @return the URL pointing to the entries file loaded or saved
+     * @since 1.2 (NY 2K meeting)
+     */
+    public abstract URL getEntriesURL();
+
+	/**
+	 * @return the name of this populator.  This should be a short descriptive 
+	 * name
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public abstract String getName();
+
+    //-------------------------------------------------------------------------
+    // Public methods
+    //
+
+	/**
+	 * @return a unique String ID for this JposRegPopulator instance
+	 * Can be implemented in terms of the getClassName() method
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public String getUniqueId() 
+	{ return ( uniqueId.equals( "" ) ? getClassName() : uniqueId ); }
+
+    /**
+     * @return an Enumeration of JposEntry objects
+     * @since 1.2 (NY 2K meeting)
+     */
+    public Enumeration getEntries() 
+	{
+		Vector vector = new Vector();
+		Enumeration entries = jposEntries.elements(); 
+
+		while( entries.hasMoreElements() )
+			vector.addElement( entries.nextElement() );
+
+		return vector.elements();
+	}
+
+	/**
+	 * @retun true if this populator is a composite populator or false otherwise
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public boolean isComposite() { return false; }
+
+	/**
+	 * @return a String representation of this JposRegPopulator
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public String toString() { return getName(); }
+
+	/**
+	 * @return the last exception (if any) during the last load or null if no 
+	 * exception occurred
+	 * @since 2.0.0
+	 */
+	public Exception getLastLoadException() { return lastLoadException; }
+
+    //--------------------------------------------------------------------------
+    // Protected methods
+    //
+
+    /**
+     * @return a URL pointing to the entries file
+     * @param file the File that this URL will point to
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected URL createURLFromFile( File file )
+    {
+        URL url = null;
+
+        try
+        { url = new URL( "file", "", file.getAbsolutePath() ); }
+        catch( Exception e ) 
+        {
+        	tracer.println( "Error creating URL: Exception.message=" +
+        					e.getMessage() );        	
+        }
+
+        return url;
+    }
+
+    /**
+     * @return a URL pointing to the entries file
+     * @param zipFile the ZipFile that this URL will point to
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected URL createURLFromFile( ZipFile zipFile )
+    {
+        URL url = null;
+        
+        try
+        { 
+			url = new URL( "jar", "", ( new File( zipFile.getName() ) ).
+        							  getAbsolutePath() ); 
+        }
+        catch( Exception e ) 
+        {
+        	tracer.println( "Error creating URL: Exception.message=" +
+        					e.getMessage() ); 
+        }
+
+        return url;
+    }
+
+    /**
+     * @return the jposEntries Hashtable to allow access to subclasses
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected Hashtable getJposEntries() { return jposEntries; }
+
+    /**
+     * @return true if a populator file (or URL) is defined
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected boolean isPopulatorFileDefined()
+    {
+        boolean defined = false;
+        JposProperties jposProperties = 
+        			   JposServiceLoader.getManager().getProperties();
+
+        if( jposProperties.
+        	isPropertyDefined( JposProperties.JPOS_POPULATOR_FILE_PROP_NAME ) )
+            defined = true;
+        else
+        if( jposProperties.
+        	isPropertyDefined( JposProperties.
+        					   JPOS_POPULATOR_FILE_URL_PROP_NAME ) )
+            defined = true;
+
+        return defined;
+    }
+
+    /**
+     * @return an InputStream object to the populator file
+     * (multiple calls will return a new stream each time)
+     * @since 1.2 (NY 2K meeting)
+     * @throws java.lang.Exception if an error ocurs while getting the 
+     * InputStream object
+     */
+    protected InputStream getPopulatorFileIS() throws Exception
+    {
+        JposProperties jposProperties = JposServiceLoader.
+        								getManager().getProperties();
+
+        if( jposProperties.isPropertyDefined( JposProperties.
+        									  JPOS_POPULATOR_FILE_PROP_NAME ) )
+        {
+            populatorFileName = jposProperties.
+            					getPropertyString( JposProperties.
+            									   JPOS_POPULATOR_FILE_PROP_NAME );
+
+			tracer.println( "getPopulatorFileIS(): populatorFileName=" + 
+							populatorFileName );
+
+            populatorIS = new FileInputStream( populatorFileName );
+        }
+        else
+        if( jposProperties.
+        	isPropertyDefined( JposProperties.
+        					   JPOS_POPULATOR_FILE_URL_PROP_NAME ) )
+        {
+            populatorFileURL = jposProperties.
+            				   getPropertyString( JposProperties.
+            				   JPOS_POPULATOR_FILE_URL_PROP_NAME );
+
+            URL url = new URL( populatorFileURL );
+
+            populatorIS = url.openStream();
+            
+			tracer.println( "getPopulatorFileIS(): populatorFileURL=" + 
+							populatorFileURL );            
+        }
+        else
+        {
+        	String msg = "jpos.config.populatorFile OR " +
+        				 " jpos.config.populatorFileURL properties not defined";
+			
+			tracer.println( msg );        				 
+        				 
+            throw new Exception( msg );
+        }
+
+        return populatorIS;
+    }
+
+    /**
+     * @return an OutputStream object to the populator file 
+     * (multiple calls will return a new stream each time)
+     * @since 1.2 (NY 2K meeting)
+     * @throws java.lang.Exception if an error ocurs while getting the 
+     * InputStream object
+     */
+    protected OutputStream getPopulatorFileOS() throws Exception
+    {
+        JposProperties jposProperties = JposServiceLoader.
+        								getManager().getProperties();
+
+        if( jposProperties.
+        	isPropertyDefined( JposProperties.JPOS_POPULATOR_FILE_PROP_NAME ) )
+        {
+            populatorFileName = jposProperties.
+            					getPropertyString( JposProperties.
+            					JPOS_POPULATOR_FILE_PROP_NAME );
+            
+            populatorOS = new FileOutputStream( populatorFileName );
+        }
+        else
+        if( jposProperties.
+        	isPropertyDefined( JposProperties.
+        					   JPOS_POPULATOR_FILE_URL_PROP_NAME ) )
+        {
+            populatorFileURL = jposProperties.
+            				   getPropertyString( JposProperties.
+            				   JPOS_POPULATOR_FILE_URL_PROP_NAME );
+
+            URL url = new URL( populatorFileURL );
+
+            populatorOS = url.openConnection().getOutputStream();
+        }
+        else
+        {
+        	String msg = "jpos.config.populatorFile OR " + 
+        				 "jpos.config.populatorFileURL properties not defined";
+        
+        	tracer.println( msg );
+        	
+            throw new Exception( msg );
+        }
+        
+        return populatorOS;
+    }
+
+    /**
+     * @return the populatorFile names property value 
+     * (returns "" if not defined)
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected String getPopulatorFileName() { return populatorFileName; }
+
+    /**
+     * @return the populatorURLFile names property value 
+     * (returns "" if not defined)
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected String getPopulatorFileURL() { return populatorFileURL; }
+
+	/**
+	 * Sets the unique ID for this populator
+	 * @param s the String object.  Needs to be unique
+	 * @since 1.3 (Washington DC 2001)
+	 */
+	protected void setUniqueId( String s ) { uniqueId = s; }
+
+    /**
+     * Finds the first file matching the fileName in the CLASSPATH 
+     * directory or each
+	 * JAR or Zip file in the CLASSPATH
+     * <b>NOTE:</b>Decorated the FileInputStream with a BufferedInputStream to
+     * improve load time...
+     * @param fileName the fileName to find
+     * @since 2.0 (Long Beach 2001)
+	 */
+    protected InputStream findFileInClasspath( String fileName )
+    {
+        String classpath = System.getProperty( "java.class.path" );
+        String pathSeparator = System.getProperty( "path.separator" );
+        String fileSeparator = System.getProperty( "file.separator" );
+
+        InputStream is = null;
+
+		if( fileName.startsWith( "." ) || fileName.startsWith( fileSeparator ) )
+		{
+			try
+			{ is = new BufferedInputStream( new FileInputStream( fileName ) ); }
+			catch( IOException ioe ) 
+			{ 
+				is = null; 
+				
+				tracer.println( "findFileInClasspath: IOException.msg=" +
+								ioe.getMessage() );
+			}
+
+			return is;
+		}
+
+        String path = "";
+
+		Vector jarZipFilesVector = new Vector();
+
+        for( StringTokenizer st = new StringTokenizer( classpath, 
+        												pathSeparator, false ); 
+             st.hasMoreTokens(); )
+        {
+            try 
+            {
+                path = st.nextToken().trim();
+                if( path.equals("") ) continue;
+
+                if( ( path.length() > 4 ) && 
+                    ( path.endsWith( ".zip" ) || path.endsWith( ".jar" ) ) )
+                    jarZipFilesVector.addElement( path );  
+                else 
+                {
+					String absoluteFileName = path + 
+					( ( fileName.startsWith( fileSeparator ) || 
+					path.endsWith( fileSeparator ) )  ? "" : fileSeparator )  + 
+					fileName;
+
+                    is = new BufferedInputStream( new FileInputStream( 
+                    							  absoluteFileName ) );
+                    break;
+                }
+            }
+            catch( Exception e ) { continue; }
+        }
+
+		if( is == null ) 
+			return findFileInJarZipFiles( fileName, jarZipFilesVector );
+
+        return is;
+    }
+
+    /**
+     * Finds the occurrence of the fileName in the JAR or Zip files
+	 * @param fileName the file to find
+     * @param jarFilesVector a vector of JAR/Zip file names
+     * @since 2.0 (Long Beach 2001)
+     */
+    protected InputStream findFileInJarZipFiles( String fileName, 
+    											  Vector jarZipFilesVector )
+    {
+        InputStream is = null;
+
+        for( int i = 0; i < jarZipFilesVector.size(); ++i )
+        {
+            String jarZipFileName = (String)jarZipFilesVector.elementAt( i );
+
+            try
+            {
+                ZipFile zipFile = new ZipFile( jarZipFileName );
+                Enumeration zipEntries = zipFile.entries();
+
+                while( zipEntries.hasMoreElements() )
+                {
+                    ZipEntry zipEntry = (ZipEntry)zipEntries.nextElement();
+                    String entryName = zipEntry.getName();
+                    
+					if( entryName.endsWith( fileName ) )
+                    {
+                        is = new BufferedInputStream( zipFile.
+                        	 getInputStream( zipEntry ) );
+                        break;
+                    }
+                }
+            }
+            catch( Exception e ) 
+            {
+            	tracer.println( "findInJarZipFiles: Exception.message=" +
+            					e.getMessage() );
+            }
+
+            if( is != null ) break;
+        }
+
+        return is;
+    }
+
+    //--------------------------------------------------------------------------
+    // Instance variables
+    //
+
+    private Hashtable jposEntries = new Hashtable();
+
+    private InputStream populatorIS = null;
+    private OutputStream populatorOS = null;
+
+    private String populatorFileName = "";
+    private String populatorFileURL = "";
+
+	private String uniqueId = "";
+
+	protected Exception lastLoadException = null;
+	
+	private Tracer tracer = TracerFactory.getInstance().
+							 createTracer( "AbstractRegPopulator" );
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/SimpleEntry.java b/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/SimpleEntry.java
new file mode 100644
index 0000000..5e308f5
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/SimpleEntry.java
@@ -0,0 +1,606 @@
+package jpos.config.simple;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import jpos.config.JposEntry;
+
+import java.util.*;
+import java.io.Serializable;
+
+import jpos.config.*;
+import jpos.util.JposEntryUtility;
+
+/**
+ * This is a simple implementation of the JposEntry interface using a Hashtable 
+ * to collect the properties
+ * @since 0.1 (Philly 99 meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public class SimpleEntry implements JposEntry, Serializable, Comparable
+{
+    //--------------------------------------------------------------------------
+    // Ctor(s)
+    //
+
+	/**
+	 * Default ctor (sets the JposRegPopulator to null)
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public SimpleEntry() { regPopulator = null; }
+
+	/**
+	 * One argument ctor taking the JposRegPopulator for this entry
+	 * @param populator the JposRegPopulator for this entry
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public SimpleEntry( JposRegPopulator populator ) { regPopulator = populator; }
+
+	/**
+	 * One argument ctor taking the JposRegPopulator for this entry
+	 * @param logicalName the logical name for this entry
+	 * @param populator the JposRegPopulator for this entry
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public SimpleEntry( String logicalName, JposRegPopulator populator ) 
+	{
+		this( populator );
+
+		addProperty( LOGICAL_NAME_PROP_NAME, logicalName );
+	}
+
+	/**
+	 * One argument ctor taking the LogicalName this entry
+	 * @param logicalName the logical name string for this entry
+	 * @since 2.0.0
+	 */
+	SimpleEntry( String logicalName ) { addProperty( LOGICAL_NAME_PROP_NAME, logicalName ); }
+
+    //--------------------------------------------------------------------------
+    // Public instance methods
+    //
+
+    /**
+     * @return count of number of properties 
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public int getPropertyCount() { return properties.size(); }
+
+    /**
+     * @return an enumerator for the properties names 
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public Enumeration getPropertyNames() { return properties.keys(); }
+
+    /**
+     * @return true if there is a property by the name specified
+     * @param propName the property name String
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public boolean hasPropertyWithName( String propName ) { return properties.containsKey( propName ); }
+
+    /**
+     * @return true if there is a property by the value specified
+     * NOTE: Object.equals method will be used to compare
+     * @param propValue the property's value Object
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public boolean hasPropertyWithValue( Object propValue ) { return properties.contains( propValue ); }
+
+    /** 
+     * @return the property's value Object
+     * @param propName the property's propName String
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public Object getPropertyValue( String propName ) { return properties.get( propName ); }
+
+    /** 
+     * @return the property's type
+     * @param propName the property's name String
+     * @since 2.0.0
+     */
+    public Class getPropertyType( String propName ) { return getPropertyValue( propName ).getClass(); }
+
+    /**
+     * Modifies the property value of the property passed
+	 * @return the oldPropValue or null if this property does not exist
+     * @param propName the property name
+	 * @param propValue the new property value
+	 * @since 1.3 (Tokyo 2001 meeting)
+     * @throws java.lang.IllegalArgumentException if the propName or propValue is null
+     */
+    public Object modifyPropertyValue( String propName, Object propValue ) throws IllegalArgumentException
+	{
+		checkNull( propName );
+		checkNull( propValue );
+
+		if( hasPropertyWithName( propName ) == false )
+			return null;
+
+		Object oldValue = removeProperty( propName );
+
+		addProperty( propName, propValue );
+
+		return oldValue;
+	}
+
+    /**
+     * Adds a property to the JposEntry object.
+     * NOTE: any property with the same name gets overlaid
+     * @param propName the name of this property (should be unique per property)
+     * @param propValue the properties value Object
+     * @since 0.1 (Philly 99 meeting)
+     * @throws java.lang.IllegalArgumentException if the propName or propValue is null
+     */
+    public Object addProperty( String propName, Object propValue ) throws IllegalArgumentException
+	{
+		checkNull( propName );
+		checkNull( propValue );
+
+		return properties.put( propName, propValue ); 
+	}
+
+    /**
+     * Looks for a property with name specified and removes it.  If none exist then 
+	 * does nothing and return null
+	 * @return the value for the name passed
+     * @param propName the name String of the property to remove
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public Object removeProperty( String propName ) { return properties.remove( propName ); }
+
+    /** 
+     * @return true if the two JposEntries have the same properties 
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public boolean equals( JposEntry otherEntry )
+    {
+        if( otherEntry == null ) return false;
+
+        if( getPropertyCount() != otherEntry.getPropertyCount() ) return false;
+
+        Enumeration otherPropNames = otherEntry.getPropertyNames();
+
+        while( otherPropNames.hasMoreElements() )
+        {
+            String name = (String)otherPropNames.nextElement();
+            Object value = otherEntry.getPropertyValue( name );
+
+            if( !hasPropertyWithName( name ) ) return false;
+
+            if( !getPropertyValue( name ).equals( value ) ) return false;
+        }
+
+        return true;
+    }
+
+	/**
+	 * @return a copy of this JposEntry object
+	 * @since 1.3 (Tokyo 2001 meeting)
+	 */
+	public JposEntry copy() 
+	{
+		JposEntry entryCopy = new SimpleEntry();
+
+		Enumeration entryNames = getPropertyNames();
+
+		while( entryNames.hasMoreElements() )
+		{
+			String propName = (String)entryNames.nextElement();
+			entryCopy.addProperty( propName,getPropertyValue( propName ) );
+		}
+
+		return entryCopy; 
+	}
+
+	/**
+	 * @return the JposRegPopulator that loads/saves this entry.  If null the default
+	 * populator is used
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public JposRegPopulator getRegPopulator() { return regPopulator; }
+
+	/**
+	 * @return the logical name for this JposEntry.  This is a shortcut for easily getting
+	 * the logical name vs getting a property and passing the logical name constant
+	 * @see jpos.config.JposEntry#getPropertyValue
+	 * @see jpos.config.JposEntry#LOGICAL_NAME_PROP_NAME
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public String getLogicalName() { return (String)getPropertyValue( JposEntry.LOGICAL_NAME_PROP_NAME ); }
+
+	/**
+	 * @return the JposEntry.Prop with name specified or null if no such property exist
+	 * @param propName the property name
+	 * @since 2.0.0
+	 */
+	public JposEntry.Prop getProp( String propName )
+	{
+		Object propValue = getPropertyValue( propName );
+
+		if( propValue == null ) return null;
+
+		return new Prop( propName, propValue );
+	}
+
+	/**
+	 * @return an Iterator over the properties in this JposEntry as JposEntry.Prop objects
+	 * @since 1.3 (Washington DC 2001)
+	 */
+	public Iterator getProps()
+	{
+		List list = new ArrayList();
+
+		Enumeration names = getPropertyNames();
+
+		while( names.hasMoreElements() )
+		{
+			String name = (String)names.nextElement();
+
+			list.add( new Prop( name, getPropertyValue( name ) ) );
+		}
+
+		return list.iterator();
+	}
+
+	/**
+	 * Adds a new property
+	 * @param prop the JposEntry.Prop to add
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 * @throws java.lang.IllegalArgumentException if the argument is null
+	 */
+	public void add( JposEntry.Prop prop ) throws IllegalArgumentException
+	{
+		checkNull( prop );
+
+		addProperty( prop.getName(), prop.getValue() ); 
+	}
+
+	/**
+	 * Removes the property
+	 * @param prop the JposEntry.Prop to remove
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public void remove( JposEntry.Prop prop ) { removeProperty( prop.getName() ); }
+
+	/**
+	 * Modifies the property with name of property passed with the new value if
+	 * that property currently exist in the entry otherwise does nothing
+	 * @param prop the JposEntry.Prop to modify
+	 * @since 2.0.0
+	 * @throws java.lang.IllegalArgumentException if the prop is null
+	 */
+	public void modify( JposEntry.Prop prop ) throws IllegalArgumentException
+	{
+		checkNull( prop );
+
+		if( hasPropertyWithName( prop.getName() ) == false ) return;
+
+		modifyPropertyValue( prop.getName(), prop.getValue() );
+	}
+
+	/** 
+	 * @return true if this entry has the property passed
+	 * @param prop the JposEntry.Prop to check for
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public boolean hasProp( JposEntry.Prop prop ) { return hasPropertyWithName( prop.getName() ); }
+
+	/** 
+	 * @return a JposEntry.Prop object created with the <name, value, type> tripplet
+	 * passed as arguments
+	 * @param propName the property name
+	 * @param propValue the property value
+	 * @param propType the property type (valid for this value)
+	 * @throws jpos.config.JposConfigException if any of the argument is null or the
+	 * property value and type mismatch or this is not a valid property type
+	 * @see jpos.config.JposEntryConst#PROP_TYPES
+	 * @since 2.0.0
+	 */
+	public JposEntry.Prop createProp( String propName, Object propValue, Class propType ) throws JposConfigException
+	{
+		if( propName == null || propValue == null || propType == null )
+			throw new JposConfigException( "Cannot create JposEntry.Prop with null argument" );
+
+		if( JposEntryUtility.validatePropValue( propValue, propType ) == false )
+			throw new JposConfigException( "Cannot create JposEntry.Prop with invalid value or type" );
+
+		return new Prop( propName, propValue );
+	}
+
+    //--------------------------------------------------------------------------
+    // Public overidden methods
+    //
+
+    /** 
+     * @return true if the two JposEntries have the same properties 
+     * @since 1.3 (SF 2K meeting)
+     */
+    public boolean equals( Object object )
+    {
+        if( object instanceof JposEntry )
+            return equals( (JposEntry)object );
+
+        return false;
+    }
+
+	/**
+	 * @return 0 if two entries are the same -1 if this is less or 1 of more than other
+	 * the comparison for > and < uses the logicalName of the entry to decide
+	 * @param otherEntry the other JposEntry
+	 */
+	public int compareTo( Object other )
+	{
+		if( other == null || ( (other instanceof JposEntry ) == false ) )
+			throw new RuntimeException( "Cannot compare: " + other + " with JposEntry: " + this );
+
+		JposEntry otherEntry = (JposEntry)other;
+
+		if( equals( otherEntry ) ) return 0;
+
+		return getLogicalName().compareTo( otherEntry.getLogicalName() );
+	}
+
+    /** 
+     * @return a String representation of this entry
+     * @since 1.3 (SF 2K meeting)
+     */
+    public String toString()
+    {
+        StringBuffer sb = new StringBuffer();
+
+        sb.append( "<JposEntry logicalName=\"" + getPropertyValue( JposEntry.LOGICAL_NAME_PROP_NAME ) + "\">\n" );
+        sb.append( "\t<creation factoryClass=\"" + getPropertyValue( JposEntry.SI_FACTORY_CLASS_PROP_NAME ) + "\" serviceClass=\"" + getPropertyValue( JposEntry.SERVICE_CLASS_PROP_NAME ) + "\"/>\n" );
+        sb.append( "\t<vendor name=\"" + getPropertyValue( JposEntry.VENDOR_NAME_PROP_NAME ) + "\" url=" + getPropertyValue( JposEntry.VENDOR_URL_PROP_NAME ) + "\"/>\n" );
+        sb.append( "\t<jpos category=\"" + getPropertyValue( JposEntry.DEVICE_CATEGORY_PROP_NAME ) + "\" version=\"" + getPropertyValue( JposEntry.JPOS_VERSION_PROP_NAME ) + "\"/>\n" );
+        sb.append( "\t<product description=\"" + getPropertyValue( JposEntry.PRODUCT_DESCRIPTION_PROP_NAME ) + "\" name=\"" + getPropertyValue( JposEntry.PRODUCT_NAME_PROP_NAME ) + "\" url=\"" + getPropertyValue( JposEntry.PRODUCT_URL_PROP_NAME ) + "\"/>\n" );
+
+		sb.append( "\n" );
+
+		Enumeration otherPropNames = JposEntryUtility.getNonRequiredPropNames( this );
+		while( otherPropNames.hasMoreElements() )
+		{
+			String name = (String)otherPropNames.nextElement();
+			String value = getPropertyValue( name ).toString();
+			String typeClassName = JposEntryUtility.shortClassName( value.getClass() );
+
+			sb.append( "\t<prop name=\"" + name + "\" value=\"" + value + 
+					   "\" type=\"" + typeClassName +"\"/>\n" );
+		}
+
+        sb.append( "</JposEntry>\n" );
+
+        return sb.toString();
+    }
+
+    //--------------------------------------------------------------------------
+    // Package methods
+    //
+
+	/**
+	 * Sets the JposRegPopulator that loads/saves this entry.  If null the default
+	 * populator is used
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	void setRegPopulator( JposRegPopulator populator ) { regPopulator = populator; }
+
+	//---------------------------------------------------------------------
+	// Class methods
+	//
+
+	/**
+	 * Checks that the Object argument is not null and if it is throw a IllegalArgumentException
+	 * @param object the Object argument
+	 * @throws java.lang.IllegalArgumentException if the object is null
+	 */
+	protected static void checkNull( Object object ) throws IllegalArgumentException
+	{
+		if( object == null ) 
+			throw new IllegalArgumentException( "Invalid null argument passed for a JposEntry property value or name" );
+	}
+
+    //--------------------------------------------------------------------------
+    // Instance variables
+    //
+
+    private Hashtable properties = new Hashtable();
+	private transient JposRegPopulator regPopulator = null;
+
+	//-------------------------------------------------------------------------
+	// Inner classes
+	//
+
+	/**
+	 * Inner class to represent a property of a JposEntry
+	 * @author E. Michael Maximilien
+	 * @since 1.3 (Washington DC 2001)
+	 */
+	public static class Prop implements JposEntry.Prop, Comparable
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		// 
+
+		/**
+		 * Creates a JposEntry.Prop object
+		 * @param name the name of this property
+		 * @param value the value of this property
+		 * @throws java.lang.IllegalArgumentException if any of the arguments are null
+		 */
+		public Prop( String name, Object value ) throws IllegalArgumentException
+		{
+			checkNull( name );
+			checkNull( value );
+
+			this.name = name;
+			this.value = value;
+			this.typeClass = value.getClass();
+		}
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the name of this property */
+		public String getName() { return name; }
+
+		/** @return the value of this property (the value is returned as an Object) */
+		public Object getValue() { return value; }
+
+		/** @return the value of this property as a String */
+		public String getValueAsString() { return String.valueOf( value ); }
+
+		/**
+		 * Returns the Class object that is the type of this property value
+		 * possible values returned are the java.lang wrapper classes for the
+		 * primitive types e.g. Integer, Byte, Boolean, ... 
+		 * @return the type of this property as a java.lang.Class object 
+		 */
+		public Class getType() { return typeClass; }
+
+		/** 
+		 * Sets the name of this property 
+		 * @param s the String object
+         * @throws java.lang.IllegalArgumentException if the argument is null
+		 */
+		public void setName( String s ) throws IllegalArgumentException
+		{ 
+			checkNull( s );
+
+			name = s; 
+		}
+
+		/** 
+		 * Sets the value of this property (String).  Also sets its Type.
+		 * <p><b>This is the default type of any property</b></p>
+		 * @param objValue the object's value
+		 * @throws java.lang.IllegalArgumentException if the value is null or
+		 * that this is not a valid typed property value
+		 */
+		public void setValue( Object objValue ) throws IllegalArgumentException
+		{
+			checkNull( objValue );
+
+			if( JposEntryUtility.validatePropValue( objValue, objValue.getClass() ) == false )
+				throw new IllegalArgumentException( "Cannot set property named = " + getName() + 
+													" with value = " + objValue + 
+													" invalid value or type" );
+
+			setValue( objValue, objValue.getClass() );
+		}
+
+		/** 
+		 * @return true if the property is of the type specified by the Class
+		 * object passed
+		 * @param type the Class object
+		 */
+		public boolean isOfType( Class type )
+		{
+			if( type == null || typeClass == null ) return false;
+
+			return typeClass.equals( type );
+		}
+
+		/** @return a new copy of this JposEntry.Prop object */
+		public JposEntry.Prop copy() { return new SimpleEntry.Prop( getName(), getValue() ); }
+
+		//---------------------------------------------------------------------
+		// Public overridden
+		//
+
+		/** 
+		 * @return true if this and otherProp have same name and value
+		 * @param otherProp the other JposEntry.Prop
+		 */
+		public boolean equals( Object otherProp )
+		{
+			if( otherProp == null ) return false;
+
+			if( !( otherProp instanceof JposEntry.Prop ) ) return false;
+
+			JposEntry.Prop prop = (JposEntry.Prop)otherProp;
+
+			return ( getName().equals( prop.getName() ) ) &&
+				   ( getValue().equals( prop.getValue() ) );
+		}
+
+		
+		/**
+		 * @return 0 if two entries are the same -1 if this is less or 1 of more than other
+		 * the comparison for > and < uses the logicalName of the entry to decide
+		 * @param otherEntry the other JposEntry
+		 */
+		public int compareTo( Object other )
+		{
+			if( other == null || ( (other instanceof JposEntry.Prop ) == false ) )
+				throw new RuntimeException( "Cannot compare: " + other + " with JposEntry.Prop: " + this );
+
+			JposEntry.Prop otherEntryProp = (JposEntry.Prop)other;
+
+			if( equals( otherEntryProp ) ) return 0;
+
+			return getName().compareTo( otherEntryProp.getName() );
+		}
+
+		/** @return a unique key for this object */
+		public int hashCode() { return getName().hashCode(); }
+
+		//---------------------------------------------------------------------
+		// Private methods
+		//
+
+		/** 
+		 * Sets the value of this property as an Object that must match the 
+		 * the type specified.  Also sets its Type.
+		 * @param object the Object value (must be one of wrapper for primitive types
+		 * or java.lang.String)
+		 * @param type the java.lang.Class object matching the object type
+		 * @throws java.lang.IllegalArgumentException if the object value type does not
+		 * match the Class type
+		 */
+		private void setValue( Object object, Class type ) throws IllegalArgumentException
+		{
+			checkNull( object );
+			checkNull( type );
+
+			if( !object.getClass().equals( type ) )
+				throw new IllegalArgumentException( "Value and value type not in agreement for property named = " + name );
+
+			value = object;
+			typeClass = type;
+		}
+
+		//---------------------------------------------------------------------
+		// Instance variables
+		//
+
+		private String name = "";
+		private Object value = null;
+		private Class typeClass = null;
+	}
+
+    //--------------------------------------------------------------------------
+    // Public constants
+    //
+    
+    /**
+     * serialVersionUID constant to maintain serialization compatibility between releases
+     * @since 1.3 (SF 2K meeting)
+     */
+    public static final long serialVersionUID = 6937048853319310114L;
+} 
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/SimpleEntryRegistry.java b/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/SimpleEntryRegistry.java
new file mode 100644
index 0000000..8717e85
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/SimpleEntryRegistry.java
@@ -0,0 +1,384 @@
+package jpos.config.simple;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.util.*;
+import java.io.*;
+
+import jpos.config.*;
+
+import jpos.util.tracing.Tracer;
+import jpos.util.tracing.TracerFactory;
+
+/**
+ * This is a simple implementation for the JposEntryRegistry using a Hashtable 
+ * to collect the entries.  The entry's logicalName property value is used as 
+ * the key to the table and the entry itself as the value
+ * @since 0.1 (Philly 99 meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public class SimpleEntryRegistry extends Object implements JposEntryRegistry 
+{
+    /**
+     * Default ctor
+     * @deprecated no longer used, see the 1 argument ctor 
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public SimpleEntryRegistry() {}
+
+    /**
+     * One-argument constructor
+     * @param populator the JposRegPopulator used by the registry
+     * @since 1.2 (NY 2K meeting)
+     */
+    public SimpleEntryRegistry( JposRegPopulator populator ) 
+    { regPopulator = populator; }
+
+    //--------------------------------------------------------------------------
+    // Public methods implementing the JposEntryRegistry interface
+    //
+
+    /**
+     * @return true if there is an JposEntry with the specified logical name
+     * @param logicalName the logical name for the service
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public boolean hasJposEntry( String logicalName ) 
+    { return jposEntries.containsKey( logicalName ); }
+
+    /**
+     * @return an enumeration of JposEntry objects 
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public Enumeration getEntries() 
+	{
+		Vector vector = new Vector();
+		Enumeration entries = jposEntries.elements(); 
+
+		while( entries.hasMoreElements() )
+			vector.addElement( entries.nextElement() );
+
+		return vector.elements();
+	}
+
+    /**
+     * @return the JposEntry for the logicalName specified
+     * @param logicalName the logical name of the JposEntry to find
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public JposEntry getJposEntry( String logicalName ) 
+    { return (JposEntry)jposEntries.get( logicalName ); }
+
+    /**
+     * Modify the JposEntry with logicalName with the new entry indicated
+     * @param logicalName the JposEntry's logical name
+     * @param newEntry the new JposEntry
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public void modifyJposEntry( String logicalName, JposEntry newEntry )
+    {
+        jposEntries.put( logicalName, newEntry ); 
+        
+		tracer.println( "Modified entry.logicalName = " + logicalName );                							    		                 
+
+		fireJposEntryRegistryEventModified( new JposEntryRegistryEvent( 
+											this, newEntry ) );
+    }   
+
+    /**
+     * Add an JposEntry for the service with logical name specified
+     * @param logicalName the logicalName of the service
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public void addJposEntry( String logicalName, JposEntry entry ) 
+    { 
+        jposEntries.put( logicalName, entry );
+        		
+		tracer.println( "Added entry.logicalName = " + logicalName );                							    		         
+
+		fireJposEntryRegistryEventAdded( new JposEntryRegistryEvent( 
+										 this, entry ) );
+    }
+
+    /**
+     * Add an JposEntry for the service.  The logical name is obtained 
+     * from the entry
+	 * @param entry the JposEntry to add
+	 * @see jpos.config.JposEntry#getLogicalName()
+     * @since 1.3 (Washington DC 2001 meeting)
+     */
+    public void addJposEntry( JposEntry entry )
+	{
+		addJposEntry( entry.getLogicalName(), entry );
+	}
+
+    /**
+     * Removes the specified JposEntry 
+     * @param entry the entry to remove
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public void removeJposEntry( JposEntry entry ) 
+    {
+        Enumeration entries = jposEntries.elements();
+
+        while( entries.hasMoreElements() )
+        {
+            JposEntry jposEntry = (JposEntry)entries.nextElement();
+
+            if( jposEntry.hasPropertyWithName( JposEntry.
+            								   LOGICAL_NAME_PROP_NAME ) )
+            {
+                JposEntry removedEntry = (JposEntry)jposEntries.
+                remove( entry.getPropertyValue( JposEntry.
+                							    LOGICAL_NAME_PROP_NAME ) );
+
+		        tracer.println( "Removed entry.logicalName = " + 
+                                entry.getLogicalName() );                							    
+                							    
+                fireJposEntryRegistryEventRemoved( new JposEntryRegistryEvent( 
+                								   this, removedEntry ) );				
+				
+                return;
+            }
+        }
+        
+        tracer.println( "Could not find entry to remove entry.logicalName = " + 
+                        entry.getLogicalName() );
+    }
+
+    /**
+     * Removes the JposEntry with the logicalName specified 
+     * @param logicalName the JposEntry's logical name
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public void removeJposEntry( String logicalName ) 
+    {
+        JposEntry entry = (JposEntry)jposEntries.get( logicalName );
+
+        if( entry != null )
+        {
+            jposEntries.remove( logicalName ); 
+
+            fireJposEntryRegistryEventRemoved( new JposEntryRegistryEvent( 
+            								   this, entry ) );
+        }
+    }
+
+    /**
+     * Adds a new JposEntryRegistryListener to the list of listeners
+     * @param l the JposEntryRegistryListener object
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public void addJposEntryRegistryListener( JposEntryRegistryListener l ) 
+    { listeners.addElement( l ); }
+                                    
+    /**
+     * Removes a new JposEntryRegistryListener to the list of listeners
+     * @param l the JposEntryRegistryListener object
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public void removeJposEntryRegistryListener( JposEntryRegistryListener l ) 
+    { listeners.removeElement( l ); }
+   
+    /**
+     * Tell the JposEntryRegistry to save the current entries 
+     * NOTE: the actual implementation will save it in dependent manner
+     * @since 0.1 (Philly 99 meeting)
+     * @throws java.lang.Exception if any error occurs while saving
+     */
+    public void save() throws Exception 
+    { getRegPopulator().save( getEntries() ); }
+    
+    /**
+     * Tell the JposEntryRegistry to save the current entries to the file 
+     * specified.  Depending on the current JposEntryPopulator the file might
+     * be an XML or serialized or other file.
+     * @since 2.1.0
+     * @throws java.lang.Exception if any error occurs while saving or if the
+     * current populator does not support saving in a file
+     */
+    public void saveToFile( File file ) throws Exception
+    { getRegPopulator().save( getEntries(), file.getCanonicalPath() ); }
+
+    /**
+     * @return the JposRegPopulator for this registry
+     * @since 1.2 (NY 2K meeting)
+     */
+    public JposRegPopulator getRegPopulator() { return regPopulator; }
+
+    /**
+     * Loads the JposEntryRegistry using the current populator
+     * NOTE: if no entries are found or an error occurs then the 
+     * registry is empty
+     * @since 1.2 (NY 2K meeting)
+     */
+    public void load() 
+    { 
+        getRegPopulator().load();
+        jposEntries.clear();
+
+        Enumeration entries = getRegPopulator().getEntries();
+
+        while( entries.hasMoreElements() )
+        {
+            try
+            {
+                JposEntry jposEntry = (JposEntry)entries.nextElement();
+
+                jposEntries.put( jposEntry.
+                				 getPropertyValue( JposEntry.
+                				 				   LOGICAL_NAME_PROP_NAME ),
+				                                   jposEntry );
+            }
+            catch( Exception e ) { tracer.print( e ); }
+        }
+
+		loaded = true;
+    }
+
+	/**
+	 * @return the current size of the registry 
+	 * @since 1.3 (Tokyo 2001 meeting)
+	 */
+	public int getSize() { return jposEntries.size(); }
+
+	/**
+	 * @return true if the registry has already been loaded or false otherwise
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public boolean isLoaded() { return loaded; }
+
+	//-------------------------------------------------------------------------
+	// Public methods
+	//
+
+	/**
+	 * @return a String with a list of all logical name of entries in the registry
+	 * as well as the registry size and populator name
+	 */
+	public String toString()
+	{
+		StringBuffer sb = new StringBuffer();
+
+		sb.append( "<SimpleEntryRegistry>\n" );
+
+		sb.append( "<size=\"" + getSize() + "\"\n/>" );
+		sb.append( "<populatorUniqueId=\"" + getRegPopulator().
+											 getUniqueId() + "\"\n/>" );
+		sb.append( "numberOfListeners=\"" + listeners.size() + "\"\n/>" );
+
+		sb.append( "<entries>\n" );
+
+		Enumeration entries = getEntries();
+		int count = 0;
+
+		while( entries.hasMoreElements() )
+		{
+			sb.append( "<entry" + count + ".LogicalName=\"" + 
+			           ( (JposEntry)entries.nextElement() ).
+			           getLogicalName() + "\"\n/>" );
+			count++;
+		}
+
+		sb.append( "</entries>\n" );
+
+		sb.append( "</SimpleEntryRegistry>\n" );
+
+		return sb.toString();
+	}
+
+    //-------------------------------------------------------------------------
+    // Protected methods
+    //
+
+    /**
+     * Fires a new JposEntryRegistry event when a new JposEntry is added
+     * @param e the JposEntryRegistryEvent object to fire
+     * @since 0.1 (Philly 99 meeting)
+     */
+    protected void fireJposEntryRegistryEventAdded( JposEntryRegistryEvent e )
+    {
+    	tracer.println( "fireJposEntryRegistryEventAdded: " + 
+    	                "e.getJposEntry().logicalName = " + 
+    	                e.getJposEntry().getLogicalName() );    	
+    	
+        Vector listenersClone = (Vector)listeners.clone();
+
+        synchronized( listenersClone )
+        {
+            for( int i = 0; i < listenersClone.size(); ++i )
+                ((JposEntryRegistryListener)listenersClone.elementAt( i ) ).
+                jposEntryAdded( e );
+        }
+    }
+
+    /**
+     * Fires a new JposEntryRegistry event when a new JposEntry is added
+     * @param e the JposEntryRegistryEvent object to fire
+     * @since 0.1 (Philly 99 meeting)
+     */
+    protected void fireJposEntryRegistryEventRemoved( JposEntryRegistryEvent e )
+    {
+    	tracer.println( "fireJposEntryRegistryEventRemoved: " + 
+    	                "e.getJposEntry().logicalName = " + 
+    	                e.getJposEntry().getLogicalName() );
+    	
+        Vector listenersClone = (Vector)listeners.clone();
+
+        synchronized( listenersClone )
+        {
+            for( int i = 0; i < listenersClone.size(); ++i )
+                ((JposEntryRegistryListener)listenersClone.elementAt( i ) ).
+                jposEntryRemoved( e );
+        }
+    }
+
+    /**
+     * Fires a new JposEntryRegistry event when a JposEntry is modified
+     * @param e the JposEntryRegistryEvent object to fire
+     * @since 0.1 (Philly 99 meeting)
+     */
+    protected void fireJposEntryRegistryEventModified( JposEntryRegistryEvent e )
+    {
+    	tracer.println( "fireJposEntryRegistryEventModified: " + 
+    	                "e.getJposEntry().logicalName = " + 
+    	                e.getJposEntry().getLogicalName() );    	
+    	
+        Vector listenersClone = (Vector)listeners.clone();
+
+        synchronized( listenersClone )
+        {
+            for( int i = 0; i < listenersClone.size(); ++i )
+                ((JposEntryRegistryListener)listenersClone.elementAt( i ) ).
+                jposEntryModified( e );
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // Instance variables
+    //
+
+    public Hashtable jposEntries = new Hashtable();
+    private Vector listeners = new Vector();
+    private JposRegPopulator regPopulator = null;
+	private boolean loaded = false;
+	
+	private Tracer tracer = TracerFactory.getInstance().
+	                         createTracer( "SimpleEntryRegistry" );
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/SimpleRegPopulator.java b/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/SimpleRegPopulator.java
new file mode 100644
index 0000000..6a1537d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/SimpleRegPopulator.java
@@ -0,0 +1,516 @@
+package jpos.config.simple;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.io.*;
+import java.util.*;
+import java.util.zip.*;
+import java.net.URL;
+
+import jpos.util.tracing.Tracer;
+import jpos.util.tracing.TracerFactory;
+import jpos.config.*;
+import jpos.config.simple.AbstractRegPopulator;
+
+/**
+ * Simple implementation of the JposRegPopulator loading and saving from a
+ * serialized set of entries
+ * <p>
+ * <b>NOTE</b>: this class must define a public no-argument ctor so that it may be created 
+ * via reflection when its defined in the jpos.properties as 
+ * the jpos.config.regPopulatorClass
+ * </p>
+ * @see jpos.util.JposProperties#JPOS_REG_POPULATOR_CLASS_PROP_NAME
+ * @since 1.2 (NY 2K 99 meeting)
+ * @author E. Michael Maximilien  (maxim@us.ibm.com)
+ */
+public class SimpleRegPopulator extends AbstractRegPopulator
+{
+    //-------------------------------------------------------------------------
+    // Ctor(s)
+    //
+
+    /**
+     * Default ctor
+     * @since 1.2 (NY 2K meeting)
+     */
+    public SimpleRegPopulator() 
+    { super( SimpleRegPopulator.class.getName() ); }
+
+    /**
+     * 1-arg ctor that takes the unique ID string
+	 * @param s the unique ID string
+     * @since 1.3 (Washington DC 2001 meeting)
+     */
+    public SimpleRegPopulator( String s ) { super( s ); }
+
+    //-------------------------------------------------------------------------
+    // Public methods
+    //
+
+	/**
+	 * @return the fully qualified class name implementing the 
+	 * JposRegPopulator interface
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public String getClassName() 
+	{ return SimpleRegPopulator.class.getName(); }
+
+    /**
+     * Tell the populator to save the current entries 
+     * @param entries an enumeration of JposEntry objects
+     * @since 1.2 (NY 2K meeting)
+     * @throws java.lang.Exception if any error occurs while saving
+     */
+    public void save( Enumeration entries ) throws Exception
+    {
+        saveJposEntries( entries );
+    }
+
+    /**
+     * Tell the populator to save the current entries in the file specified 
+     * @param entries an enumeration of JposEntry objects
+     * @param fileName the file name to save entries
+     * @since 1.3 (SF 2K meeting)
+     * @throws java.lang.Exception if any error occurs while saving
+     */
+    public void save( Enumeration entries, String fileName ) throws Exception
+    {
+		File file = new File( fileName );
+		FileOutputStream fos = new FileOutputStream( file );
+
+        saveJposEntries( entries, fos );
+
+		fos.close();
+    }
+
+    /**
+     * Tell the populator to load the entries 
+     * @since 1.2 (NY 2K meeting)
+     */
+    public void load()
+    {
+        getJposEntries().clear();
+        Enumeration entries = readJposEntries();
+      
+        while( entries.hasMoreElements() ) 
+        {
+            try
+            {
+                JposEntry entry = (JposEntry)entries.nextElement();
+                String logicalName = logicalName = (String)entry.
+                getPropertyValue( JposEntry.LOGICAL_NAME_PROP_NAME );
+
+                if( logicalName != null )
+                    getJposEntries().put( logicalName, entry );
+
+				lastLoadException = null;
+            }
+            catch( Exception e ) 
+            {
+				lastLoadException = e;
+				tracer.println( "Error loading serialized JposEntry file: " + 
+				                "Exception.message= " + e.getMessage() ); 
+			}
+        }
+    }
+
+    /**
+     * Loads the entries specified in the fileName
+     * @param fileName the entries file name
+     * @since 1.3 (SF 2K meeting)
+     */
+    public void load( String fileName )
+    {
+        try
+        {
+            getJposEntries().clear();
+            Enumeration entries = readJposEntries( new FileInputStream( fileName ) );
+
+            while( entries.hasMoreElements() ) 
+            {
+                JposEntry entry = (JposEntry)entries.nextElement();
+                String logicalName = (String)entry.
+                getPropertyValue( JposEntry.LOGICAL_NAME_PROP_NAME );
+
+                if( logicalName != null )
+                    getJposEntries().put( logicalName, entry );
+            }
+
+			lastLoadException = null;
+        }
+        catch( Exception e ) 
+        {
+			lastLoadException = e;
+			tracer.println( "Error loading serialized JposEntry file: " + 
+			                "Exception.message=" + e.getMessage() ); 
+		}
+    }
+
+    /**
+     * @return the URL pointing to the entries file loaded or saved
+     * @since 1.2 (NY 2K meeting)
+     */
+    public URL getEntriesURL() 
+    {
+        URL url = null;
+
+        if( serInZipFile )
+            url = createURLFromFile( zipSerFile );
+        else
+            url = createURLFromFile( serFile );
+
+        return url;
+    }
+
+	/**
+	 * @return the name of this populator.  This should be a short descriptive name
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public String getName() { return SIMPLE_REG_POPULATOR_NAME_STRING; }
+
+    //--------------------------------------------------------------------------
+    // Protected methods
+    //
+
+    /**
+     * Tries to save the entries as a ZipEntry in the ZipFile
+     * @param entries an Enumeration of JposEntry objects
+     * NOTE: if the the serialized entries is in a Sip/JAR file then if must be an
+     * entry in the "root" of the Sip/JAR file...
+     * Also when saving in a Zip/JAR file could get an error because the Zip/JAR file
+     * is being used by a process in Win32 environment
+     * @since 1.2 (NY 2K meeting)
+     * @throws java.lang.Exception if any problems occurs while saving
+     */
+    protected void saveSerInZipFile( Enumeration entries ) throws Exception
+    {
+        ZipOutputStream zos = new ZipOutputStream( new 
+        					  FileOutputStream( zipSerFile.getName() + ".temp.jar" ) );
+
+        Enumeration zipEntries = zipSerFile.entries();
+
+        while( zipEntries.hasMoreElements() )
+        {
+            ZipEntry zipEntry = (ZipEntry)zipEntries.nextElement();
+
+            zos.putNextEntry( zipEntry );
+
+            if( zipEntry.getName() != serFileName )
+            {
+                InputStream is = zipSerFile.getInputStream( zipEntry );
+
+                while( is.available() > 0 )
+                {
+                    byte[] byteArray = new byte[ is.available() ];
+
+                    is.read( byteArray );
+
+                    zos.write( byteArray );
+                }
+
+                zos.closeEntry();
+            }
+            else
+            {
+                ObjectOutputStream oos = new ObjectOutputStream( new 
+                						 FileOutputStream( TEMP_SER_FILE_NAME ) );
+
+                while( entries.hasMoreElements() )
+                {
+                    JposEntry entry = (JposEntry)entries.nextElement();
+
+                    oos.writeObject( entry );
+                }
+
+                oos.flush();
+                oos.close();
+
+                FileInputStream fis = new FileInputStream( TEMP_SER_FILE_NAME );
+
+                while( fis.available() > 0 )
+                {
+                    byte[] byteArray = new byte[ fis.available() ];
+
+                    fis.read( byteArray );
+
+                    zos.write( byteArray );
+                }
+
+                zos.closeEntry();
+            }
+        }
+
+        zos.flush();
+        zos.close();
+    }
+
+    /**
+     * Tries to save the entries in the file where they were loaded
+     * @param entries an Enumeration of JposEntry objects
+     * @since 1.2 (NY 2K meeting)
+     * @throws java.lang.Exception if any problems occurs while saving
+     */
+    protected void saveSerFile( Enumeration entries ) throws Exception
+    {
+        saveJposEntries( entries, new FileOutputStream( serFileName ) );
+    }
+
+    /**
+     * Save the JposEntry object to the OutputStream as serialized objects
+     * @param entries an enumeration of JposEntry objects
+     * @param os the OuputStream to save to
+     * @since 1.2 (NY 2K meeting)
+     * @throws java.lang.Exception if any error occurs while saving
+     */
+    protected void saveJposEntries( Enumeration entries, OutputStream os ) 
+    throws Exception
+    {
+        ObjectOutputStream oos = new ObjectOutputStream( os );
+
+        while( entries.hasMoreElements() )
+        {
+            JposEntry entry = (JposEntry)entries.nextElement();
+
+            oos.writeObject( entry );
+        }
+
+        oos.close();
+    }
+
+    /**
+     * @return an ObjectInputStream of the first serFileName found.  The algorithm is:
+     * 1) Goes through the CLASSPATH and get the first serialized file name in the paths in order
+     * 2) If no simple ser file is found then looks in the JAR files in order
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected ObjectInputStream findSerOIS()
+    {       
+        Vector classpathJarFiles = new Vector();
+
+        //Try to find the serialized file in the directory of each path in CLASSPATH
+        //As a side effect put each JAR/Zip file in the vector
+        ObjectInputStream ois = findSerOISInClasspath( classpathJarFiles );
+
+        //If no serialized file found in the directories of the path in the CLASSPATH then
+        //try to open each JAR/Zip file and see if they contain a serialized file
+        if( ois == null )
+            ois = findSerOISInJar( classpathJarFiles );
+        
+        return ois;
+    }
+
+    /**
+     * Finds the first serialized JposEntry file in directory of each classpath
+     * <b>NOTE:</b>Decorated the FileInputStream with a BufferedInputStream to
+     * improve load time...
+     * @param jarZipFilesVector a vector of JAR/Zip file names
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected ObjectInputStream findSerOISInClasspath( Vector jarZipFilesVector )
+    {
+        ObjectInputStream ois = null;
+
+        String classpath = System.getProperty( "java.class.path" );
+        String pathSeparator = System.getProperty( "path.separator" );
+        String fileSeparator = System.getProperty( "file.separator" );
+
+        String path = "";
+
+        //Searches for the serialized JposEntry file 
+        for( StringTokenizer st = new StringTokenizer( classpath, pathSeparator, false ); 
+             st.hasMoreTokens(); )
+        {
+            try 
+            {
+                path = st.nextToken().trim();
+                if( path.equals("") ) continue;
+
+                if( path.length() > 4 && ( path.endsWith( ".zip" ) || path.endsWith( ".jar" ) ) )
+                    jarZipFilesVector.addElement( path );  
+                else 
+                {
+                    absoluteFileName = path + fileSeparator + serFileName;
+
+                    ois = new ObjectInputStream( new BufferedInputStream( new FileInputStream( absoluteFileName ) ) );
+
+                    serFile = new File( absoluteFileName );
+                    serInZipFile = false;
+                    break;
+                }
+            }
+            catch( Exception e ) { continue; }
+        }
+
+        return ois;
+    }
+
+    /**
+     * Finds the first serialized JposEntry file in the JAR files
+     * @param jarFilesVector a vector of JAR/Zip file names
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected ObjectInputStream findSerOISInJar( Vector jarFilesVector )
+    {
+        ObjectInputStream ois = null;
+
+        for( int i = 0; i < jarFilesVector.size(); ++i )
+        {
+            String jarFileName = (String)jarFilesVector.elementAt( i );
+
+            try
+            {
+                ZipFile zipFile = new ZipFile( jarFileName );
+                Enumeration zipEntries = zipFile.entries();
+
+                while( zipEntries.hasMoreElements() )
+                {
+                    ZipEntry zipEntry = (ZipEntry)zipEntries.nextElement();
+                    String entryName = zipEntry.getName();
+                    if( entryName.endsWith( serFileName ) )
+                    {
+                        ois = new ObjectInputStream( zipFile.getInputStream( zipEntry ) );
+                        zipSerFile = zipFile;
+                        serInZipFile = true;
+                        break;
+                    }
+                }
+            }
+            catch( Exception e ) {}
+
+            if( ois != null ) break;
+        }
+
+        return ois;
+    }
+
+    /** 
+     * Searches the current class path for the serialized file and un-serializes the JposEntry objects
+     * @return an Enumeration of JposEntry objects un-serializes from the file specified
+     * @param is the InputStream from which to read the serialized entries from
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected Enumeration readJposEntries( InputStream is )
+    {
+        Vector entries = new Vector();
+
+        try
+        {
+			//Added in 1.3 (SF-2K meeting) (not elegant since need to do
+			//a instanceof operation but works :-)
+            ObjectInputStream in = null;
+
+			if( is instanceof ObjectInputStream )
+                in = (ObjectInputStream)is;
+			else
+				if( is != null )
+					in = new ObjectInputStream( is );
+
+            if( in == null )
+                tracer.println( "Can't find serialized JposEntry file: " + 
+                                serFileName );
+            else
+                while( true )
+                    entries.addElement( in.readObject() );
+
+            serFileName = absoluteFileName;
+        } 
+        catch( EOFException eofe ) {}
+        catch( Exception e ) 
+        { tracer.println( "ERROR while reading serialized JposEntry file: " + 
+        	              serFileName + " Exception.message=" + 
+        	              e.getMessage() ); }
+        
+        return entries.elements();
+    }
+
+    /** 
+     * @return an Enumeration of JposEntry objects
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected Enumeration readJposEntries()
+    {
+        Enumeration entries = null;
+
+        if( isPopulatorFileDefined() )
+            try { entries = readJposEntries( getPopulatorFileIS() ); }
+            catch( Exception e )
+            { entries = ( new Vector() ).elements(); }
+        else
+            entries = readJposEntries( findSerOIS() );
+
+        return entries;
+    }
+
+    /**
+     *
+     * @param entries an enumeration of JposEntry objects
+     * @since 1.2 (NY 2K meeting)
+     * @throws java.lang.Exception if any error occurs while saving
+     */
+    protected void saveJposEntries( Enumeration entries ) throws Exception
+    {
+        if( isPopulatorFileDefined() )
+            saveJposEntries( entries, getPopulatorFileOS() );
+        else
+        {
+            if( serInZipFile )
+                saveSerInZipFile( entries );
+            else
+                saveSerFile( entries );
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // Instance variables
+    //
+
+    private File serFile = null;
+    private ZipFile zipSerFile = null;
+
+    private boolean serInZipFile = false;
+
+    private String absoluteFileName = "";
+    private String serFileName = DEFAULT_JPOS_SER_FILE_NAME;
+
+	private Tracer tracer = TracerFactory.getInstance().
+	                         createTracer( "SimpleRegPopulator" );	
+
+    //--------------------------------------------------------------------------
+    // Class constants
+    //
+
+    /**
+     * The default serialized JposEntry file name
+     * @since 1.2 (NY 2K meeting)
+     */
+    public static final String DEFAULT_JPOS_SER_FILE_NAME = "jpos.cfg";
+
+	/**
+	 * A tempory file name used for temporary storage
+	 * @since 1.2 (NY 2K meeting)
+	 */
+    public static final String TEMP_SER_FILE_NAME = "__jpos_temp.cfg";
+	
+	/**
+	 * The default name for the SimpleRegPopulator
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public static final String SIMPLE_REG_POPULATOR_NAME_STRING = "JCL Serialized Entries Populator";
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/xml/AbstractXercesRegPopulator.java b/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/xml/AbstractXercesRegPopulator.java
new file mode 100644
index 0000000..20a8147
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/xml/AbstractXercesRegPopulator.java
@@ -0,0 +1,545 @@
+package jpos.config.simple.xml;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.io.*;
+import java.util.*;
+import java.net.URL;
+import java.text.DateFormat;
+
+import java.io.PrintWriter;
+
+import org.apache.xerces.dom.DOMImplementationImpl;
+import org.apache.xerces.parsers.DOMParser;
+import org.apache.xml.serialize.OutputFormat;
+import org.apache.xml.serialize.XMLSerializer;
+
+import org.w3c.dom.*;
+                  
+import jpos.config.*;
+import jpos.config.simple.*;
+import jpos.util.*;
+import jpos.util.tracing.Tracer;
+import jpos.util.tracing.TracerFactory;
+
+/**
+ * This class is an abstract super class for all Xerces based parser/reg 
+ * populator with functionality to serialize an enumeration of JposEntry 
+ * objects into XML 
+ * <p>
+ * <b>NOTE</b>: this class must define a public no-argument ctor so that it may be 
+ * created via reflection when its defined in the jpos.properties as the 
+ * jpos.config.regPopulatorClass
+ * </p>
+ * @see jpos.util.JposProperties#JPOS_REG_POPULATOR_CLASS_PROP_NAME
+ * @since 2.1.0
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public abstract class AbstractXercesRegPopulator 
+				  extends AbstractRegPopulator 
+				  implements XmlRegPopulator
+{
+    //-------------------------------------------------------------------------
+    // Ctor(s)
+    //
+
+    /**
+     * 1-arg constructor that takes the unique ID
+	 * @param s the unique ID string
+     * @since 1.3 (Washington DC 2001)
+     */
+    public AbstractXercesRegPopulator( String s ) { super( s ); }
+
+    //-------------------------------------------------------------------------
+    // Public methods
+    //
+
+    /**
+     * Tell the populator to save the current entries 
+     * @param entries an enumeration of JposEntry objects
+     * @since 1.2 (NY 2K meeting)
+     * @throws java.lang.Exception if any error occurs while saving
+     */
+    public void save( Enumeration entries ) throws Exception
+    {
+        if( isPopulatorFileDefined() )
+            convertJposEntriesToXml( entries, getPopulatorFileOS() );
+        else
+            convertJposEntriesToXml( entries, 
+       		new FileOutputStream( getDefaultXmlFileName() ) );
+    }
+
+    /**
+     * Tell the populator to save the current entries in the file specified 
+     * @param entries an enumeration of JposEntry objects
+     * @param xmlFileName the XML file name to save entries
+     * @since 1.3 (SF 2K meeting)
+     * @throws java.lang.Exception if any error occurs while saving
+     */
+    public void save( Enumeration entries, String xmlFileName ) 
+    throws Exception
+    { 
+		File xmlFile = new File( xmlFileName );
+		FileOutputStream fos = new FileOutputStream( xmlFile );
+
+		convertJposEntriesToXml( entries, fos ); 
+
+		fos.close();
+	}
+
+    /**
+     * @return the URL pointing to the entries file loaded or saved
+     * @since 1.2 (NY 2K meeting)
+     */
+    public URL getEntriesURL()
+    {
+        URL url = null;
+
+        if( getPopulatorFileURL() != null && 
+        	!getPopulatorFileURL().equals( "" ) )
+            try
+            { url =  new URL( getPopulatorFileURL() ); }
+            catch( Exception e ) 
+            {
+            	tracer.println( "getEntriesURL: Exception.message=" + 
+            					e.getMessage() );
+            }
+        else
+            url = createURLFromFile( new File( getPopulatorFileName() ) );
+            
+		//<temp>            
+		tracer.println( "getPopulatorFileURL()=" + getPopulatorFileURL() );
+		tracer.println( "getPopulatorFileName()=" + getPopulatorFileName() );
+		//</temp>
+
+        return url;
+    }
+
+    //--------------------------------------------------------------------------
+    // Protected methods
+    //
+
+	/** @return the Tracer object */
+	protected Tracer getTracer() { return tracer; }
+	
+	/** 
+	 * @return the default XML file name that this populator will save 
+	 * entries to 
+	 */
+	protected String getDefaultXmlFileName() { return xmlFileName; }
+	    
+    /**
+     * Converts an Enumeration of JposEntry objects to XML
+     * @param entries an Enumeration of JposEntry objects
+     * @param os the OutputStream to stream the entries to
+     * @exception java.lang.Exception if something goes wrong serializing
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected void convertJposEntriesToXml( Enumeration entries,
+                                              OutputStream os ) 
+    throws Exception
+    {
+        Document document = getParser().getDocument();
+        serializeDocument( document, entries, os );
+    }
+    
+    /**
+     * @return the DOM parser object
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected DOMParser getParser() { return domParser; }
+
+    /**
+     * Serializes the JposEntry objects to an XML document and save to OutputStream
+     * @param document the XML document object
+     * @param entries an Enumeration of JposEntry objects
+     * @param os the OuputStream object
+     * @exception java.lang.Exception anything goes wrong while saving
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected void serializeDocument( Document document, 
+    									Enumeration entries, 
+    									OutputStream os ) throws Exception
+    {
+        Document newDoc = createEmptyDocument();
+
+        insertJposEntriesInDoc( newDoc, entries );
+
+        insertDateSavedComment( newDoc );
+
+        OutputFormat outFormat = new OutputFormat( "xml", "UTF-8", true );
+
+        outFormat.setStandalone( false );
+        outFormat.setIndenting( true );
+        outFormat.setIndent( 4 );
+        outFormat.setPreserveSpace( true );
+        outFormat.setLineWidth( 0 );
+
+        insertDTDInfo( newDoc, outFormat );
+
+        PrintWriter outWriter = null;
+		try
+		{
+			outWriter = new PrintWriter
+			(new BufferedWriter(new OutputStreamWriter(os, "UTF-8")));
+		}
+		catch( UnsupportedEncodingException ex )
+		{ 
+			tracer.println( "Error making PrintWriter: " + 
+			                "UnsupportedEncodingException.message = " + 
+			                ex.getMessage() );
+		}
+
+		if( outWriter != null )
+		{
+			XMLSerializer xmlSerializer = new XMLSerializer( outWriter, outFormat );
+			xmlSerializer.serialize( newDoc );
+		}
+    }
+
+	/**
+	 * @return a String with the document type definition value.  For DTD this
+	 * would be the DTD relative path/file and for schemas the XSD 
+	 * relative path/file
+	 * @since 2.1.0
+	 */
+	protected String getDoctypeValue() { return "jpos/res/jcl.dtd"; }
+
+    /**
+     * Inset DTD information in the XML Document object
+     * @param doc the XML Document object
+     * @param outFormat the OuputFormat object
+     * @exception java.lang.Exception in case something goes wrong
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected void insertDTDInfo( Document doc, OutputFormat outFormat ) throws Exception
+    {
+        String publicId = OutputFormat.whichDoctypePublic( doc );
+        String systemId = OutputFormat.whichDoctypeSystem( doc );
+
+        outFormat.setDoctype( "JposEntries", getDoctypeValue() );
+    }
+
+    /**
+     * @return an empty XML Document object
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected Document createEmptyDocument()
+    {
+        DOMImplementationImpl domImpImpl = (DOMImplementationImpl)
+        					  DOMImplementationImpl.getDOMImplementation();
+        DocumentType docType = domImpImpl.
+        					   createDocumentType( "JposEntries", 
+        					   					   "-//JavaPOS//DTD//EN", 
+        					   					   getDoctypeValue() );
+        					   					   
+        Document doc = domImpImpl.createDocument( null, "JposEntries", docType );
+
+        return doc;
+    }
+    
+    /**
+     * Inserts date and info saved in the XML Document object
+     * @param document the XML Document object
+     * @exception java.lang.Exception in case something goes wrong
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected void insertDateSavedComment( Document document ) 
+    throws Exception
+    {
+        String dateString = DateFormat.getInstance().
+                            format( new Date( System.currentTimeMillis() ) );
+
+        String commentString = 
+        "Saved by JavaPOS jpos.config/loader (JCL) version " + 
+        Version.getVersionString() + " on " + dateString;
+
+        Comment comment = document.createComment( commentString );
+
+        document.getDocumentElement().
+        insertBefore( comment, document.getDocumentElement().getFirstChild() );
+
+        document.getDocumentElement().
+        insertBefore(  document.createTextNode( "\n" ), comment );
+        
+        document.getDocumentElement().
+        appendChild( document.createTextNode( "\n" ) );
+    }
+    
+    /**
+     * Appends the <creation> element to the document
+     * @param doc the XML Document object
+     * @param jposEntryElement the <JposEntryElement> XML Element object
+     * @param jposEntry the JposEntry object
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected void appendCreationElement( Document doc, 
+    										Element jposEntryElement,
+                                            JposEntry jposEntry )
+    {
+        jposEntryElement.appendChild( doc.createTextNode( "    " + "    " ) );
+
+        Element creationElement = doc.createElement( "creation" );
+
+        Attr factoryClassAttr = doc.createAttribute( "factoryClass" );
+        Attr serviceClassAttr = doc.createAttribute( "serviceClass" );
+
+        factoryClassAttr.setValue( (String)jposEntry.
+        						   getPropertyValue( "serviceInstanceFactoryClass" ) );
+
+        serviceClassAttr.setValue( (String)jposEntry.
+        						   getPropertyValue( "serviceClass" ) );
+
+        creationElement.setAttributeNode( factoryClassAttr );
+        creationElement.setAttributeNode( serviceClassAttr );
+
+        jposEntryElement.appendChild( creationElement );
+        jposEntryElement.appendChild( doc.createTextNode( "\n" ) );
+    }
+
+    /**
+     * Appends the <vendor> element to the document
+     * @param doc the XML Document object
+     * @param jposEntryElement the <JposEntryElement> XML Element object
+     * @param jposEntry the JposEntry object
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected void appendVendorElement( Document doc, Element jposEntryElement,
+                                        JposEntry jposEntry )
+    {
+        jposEntryElement.appendChild( doc.createTextNode( "    " + "    " ) );
+
+        Element vendorElement = doc.createElement( "vendor" );
+
+        Attr nameAttr = doc.createAttribute( "name" );
+        Attr urlAttr = doc.createAttribute( "url" );
+
+        nameAttr.setValue( (String)jposEntry.getPropertyValue( "vendorName" ) );
+        urlAttr.setValue( (String)jposEntry.getPropertyValue( "vendorURL" ) );
+
+        vendorElement.setAttributeNode( nameAttr );
+        vendorElement.setAttributeNode( urlAttr );
+
+        jposEntryElement.appendChild( vendorElement );
+        jposEntryElement.appendChild( doc.createTextNode( "\n" ) );
+    }
+
+    /**
+     * Appends the <jpos> element to the document
+     * @param doc the XML Document object
+     * @param jposEntryElement the <JposEntryElement> XML Element object
+     * @param jposEntry the JposEntry object
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected void appendJposElement( Document doc, Element jposEntryElement,
+                                      JposEntry jposEntry )
+    {
+        jposEntryElement.appendChild( doc.createTextNode( "    " + "    " ) );
+
+        Element jposElement = doc.createElement( "jpos" );
+
+        Attr versionAttr = doc.createAttribute( "version" );
+        Attr categoryAttr = doc.createAttribute( "category" );
+
+        versionAttr.setValue( (String)jposEntry.
+        					   getPropertyValue( "jposVersion" ) );
+        
+        categoryAttr.setValue( (String)jposEntry.
+        						getPropertyValue( "deviceCategory" ) );
+
+        jposElement.setAttributeNode( versionAttr );
+        jposElement.setAttributeNode( categoryAttr );
+
+        jposEntryElement.appendChild( jposElement );
+        jposEntryElement.appendChild( doc.createTextNode( "\n" ) );
+    }
+
+    /**
+     * Appends the <product> element to the document
+     * @param doc the XML Document object
+     * @param jposEntryElement the <JposEntryElement> XML Element object
+     * @param jposEntry the JposEntry object
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected void appendProductElement( Document doc, 
+                      					   Element jposEntryElement,
+                                           JposEntry jposEntry )
+    {
+        jposEntryElement.appendChild( doc.createTextNode( "    " + "    " ) );
+
+        Element productElement = doc.createElement( "product" );
+
+        Attr nameAttr = doc.createAttribute( "name" );
+        Attr descriptionAttr = doc.createAttribute( "description" );
+        Attr urlAttr = doc.createAttribute( "url" );
+
+        nameAttr.setValue( (String)jposEntry.getPropertyValue( "productName" ) );
+        
+        descriptionAttr.
+        setValue( (String)jposEntry.getPropertyValue( "productDescription" ) );
+        
+        urlAttr.setValue( (String)jposEntry.getPropertyValue( "productURL" ) );
+
+        productElement.setAttributeNode( nameAttr );
+        productElement.setAttributeNode( descriptionAttr );
+        productElement.setAttributeNode( urlAttr );
+
+        jposEntryElement.appendChild( productElement );
+        jposEntryElement.appendChild( doc.createTextNode( "\n" ) );
+    }
+
+    /**
+     * Appends the <prop> element to the document
+     * @param doc the XML Document object
+     * @param jposEntryElement the <JposEntryElement> XML Element object
+     * @param propName the property name
+     * @param propValue the property value
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected void appendPropElement( Document doc, Element jposEntryElement,
+                                      String propName, Object propValue )
+    {
+        jposEntryElement.appendChild( doc.createTextNode( "    " + "    " ) );
+
+        Element propElement = doc.createElement( "prop" );
+
+        Attr nameAttr = doc.createAttribute( "name" );
+        Attr valueAttr = doc.createAttribute( "value" );
+        Attr typeAttr = doc.createAttribute( "type" );
+
+        nameAttr.setValue( propName );
+        valueAttr.setValue( propValue.toString() );
+        typeAttr.setValue( JposEntryUtility.
+                           shortClassName( propValue.getClass() ) );
+
+        propElement.setAttributeNode( nameAttr );
+        propElement.setAttributeNode( valueAttr );
+        propElement.setAttributeNode( typeAttr );
+
+        jposEntryElement.appendChild( propElement );
+        jposEntryElement.appendChild( doc.createTextNode( "\n" ) );
+    }
+
+    /**
+     * Appends non-required properties name and value
+     * @param doc the XML Document object
+     * @param jposEntryElement the <JposEntryElement> XML Element object
+     * @param jposEntry the JposEntry object
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected void appendPropElements( Document doc, Element jposEntryElement,
+                                         JposEntry jposEntry )
+    {
+        jposEntryElement.appendChild( doc.
+        				 createTextNode( "\n" + "    " + "    " ) );
+
+		String comment = "Other non JavaPOS required property" +
+						 " (mostly vendor properties and bus specific " + 
+						 "properties i.e. RS232 )";
+        
+        jposEntryElement.appendChild( doc.createComment( comment ) );
+        
+        jposEntryElement.appendChild( doc.createTextNode( "\n" ) );
+
+        Enumeration props = jposEntry.getPropertyNames();
+
+        while( props.hasMoreElements() )
+        {
+            String propName = (String)props.nextElement();
+
+            if( !JposEntryUtility.isRequiredPropName( propName ) )
+                appendPropElement( doc, jposEntryElement, propName, 
+                				   jposEntry.getPropertyValue( propName ) );
+        }
+    }
+
+    /**
+     * Insert the <JposEntryElement> in the XML document object
+     * @param doc the XML Document object
+     * @param jposEntryElement the <JposEntryElement> XML Element object
+     * @param jposEntry the JposEntry object
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected void insertJposEntryInDoc( Document doc, Element jposEntryElement,
+                                         JposEntry jposEntry )
+    {
+        appendCreationElement( doc, jposEntryElement, jposEntry );
+        appendVendorElement( doc, jposEntryElement, jposEntry );
+        appendJposElement( doc, jposEntryElement, jposEntry );
+        appendProductElement( doc, jposEntryElement, jposEntry );
+        appendPropElements( doc, jposEntryElement, jposEntry );
+
+        doc.getDocumentElement().
+        	appendChild( doc.createTextNode( "\n" + "    " ) );
+        doc.getDocumentElement().
+        	appendChild( jposEntryElement );
+        doc.getDocumentElement().
+        	appendChild( doc.createTextNode( "\n" + "    " ) );
+    }
+
+    /**
+     * Insert an Enumeration of <JposEntryElement> objects in the XML document
+     * @param doc the XML Document object
+     * @param entries an Enumeration of JposEntry objects
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected void insertJposEntriesInDoc( Document doc, Enumeration entries )
+    {
+        while( entries.hasMoreElements() )
+        {
+            JposEntry jposEntry = (JposEntry)entries.nextElement();
+
+            if( JposEntryUtility.isValidJposEntry( jposEntry ) )
+            {
+                doc.getDocumentElement().
+                    appendChild( doc.createTextNode( "\n" + "    " ) );
+
+                Element jposEntryElement = doc.createElement( "JposEntry" );
+
+                Attr logicalNameAttr = doc.createAttribute( "logicalName" );
+                logicalNameAttr.setValue( (String)jposEntry.
+                                          getPropertyValue( "logicalName" ) );
+
+                jposEntryElement.setAttributeNode( logicalNameAttr ); 
+
+                jposEntryElement.appendChild( doc.createTextNode( "\n" ) );
+
+                insertJposEntryInDoc( doc, jposEntryElement, jposEntry );
+            }
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // Instance variables
+    //
+
+	protected String xmlFileName = DEFAULT_XML_FILE_NAME;
+	
+    protected DOMParser domParser = new DOMParser();
+
+	private Tracer tracer = TracerFactory.getInstance().
+						     createTracer( "AbstractXercesRegPopulator" );
+    
+    //--------------------------------------------------------------------------
+    // Public constants
+    //
+
+    public static final String DTD_FILE_PATH = "jpos" + File.separator + "res";
+    public static final String DTD_FILE_NAME = DTD_FILE_PATH + File.separator + "jcl.dtd";
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/xml/SimpleXmlRegPopulator.java b/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/xml/SimpleXmlRegPopulator.java
new file mode 100644
index 0000000..55e6951
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/xml/SimpleXmlRegPopulator.java
@@ -0,0 +1,133 @@
+package jpos.config.simple.xml;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.util.*;
+import java.net.URL;
+
+import jpos.config.simple.AbstractRegPopulator;
+
+/**
+ * Simple implementation of the JposRegPopulator that loads and saves the entries
+ * in XML using the "jpos/res/jcl.dtd" DTD and the XML4J (Xerces) API
+ * <p>
+ * <b>NOTE</b>: this class must define a public no-argument ctor so that it may be created 
+ * via reflection when its defined in the jpos.properties as 
+ * the jpos.config.regPopulatorClass
+ * </p>
+ * @see jpos.util.JposProperties#JPOS_REG_POPULATOR_CLASS_PROP_NAME
+ * @since 1.2 (NY 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public class SimpleXmlRegPopulator extends AbstractRegPopulator 
+									implements XmlRegPopulator
+{
+    //-------------------------------------------------------------------------
+    // Ctor(s)
+    //
+
+    /**
+     * Default ctor
+     * @since 1.2 (NY 2K meeting)
+     */
+    public SimpleXmlRegPopulator() 
+    { super( SimpleXmlRegPopulator.class.getName() ); }
+
+    /**
+     * 1-arg constructor that takes the unique ID
+	 * @param s the unique ID string
+     * @since 1.3 (Washington DC 2001)
+     */
+    public SimpleXmlRegPopulator( String s ) { super( s ); }
+
+    //-------------------------------------------------------------------------
+    // Public methods
+    //
+
+	/**
+	 * @return the fully qualified class name implementing the JposRegPopulator interface
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public String getClassName() { return SimpleXmlRegPopulator.class.getName(); }
+
+    /**
+     * Tell the populator to save the current entries 
+     * @param entries an enumeration of JposEntry objects
+     * @since 1.2 (NY 2K meeting)
+     * @throws java.lang.Exception if any error occurs while saving
+     */
+    public void save( Enumeration entries ) throws Exception
+    { regPopulator.save( entries ); }
+
+    /**
+     * Tell the populator to save the current entries in the file specified 
+     * @param entries an enumeration of JposEntry objects
+     * @param fileName the file name to save entries
+     * @since 1.3 (SF 2K meeting)
+     * @throws java.lang.Exception if any error occurs while saving
+     */
+    public void save( Enumeration entries, String fileName ) throws Exception
+    { regPopulator.save( entries, fileName ); }
+
+    /**
+     * Tell the populator to load the entries 
+     * @since 1.2 (NY 2K meeting)
+     */
+    public void load() { regPopulator.load(); }
+
+
+    /**
+     * Loads the entries specified in the fileName
+     * @param fileName the entries file name
+     * @since 1.3 (SF 2K meeting)
+     */
+    public void load( String fileName ) { regPopulator.load( fileName ); }
+    
+    /**
+     * @return an Enumeration of JposEntry objects
+     * NOTE: need to overridde this method here because need to forward call
+     *       to the regPopulator instance
+     * @since 1.2 (NY 2K meeting)
+     */
+    public Enumeration getEntries() { return regPopulator.getEntries(); }
+
+    /**
+     * @return the URL pointing to the entries file loaded or saved
+     * @since 1.2 (NY 2K meeting)
+     */
+    public URL getEntriesURL() { return regPopulator.getEntriesURL(); }
+
+	/**
+	 * @return the name of this populator.  This should be a short descriptive name
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public String getName() { return regPopulator.getName(); }
+
+	/**
+	 * @return the last exception (if any) during the last load or null if no exception occurred
+	 * @since 2.0.0
+	 */
+	public Exception getLastLoadException() { return regPopulator.getLastLoadException(); }
+
+    //--------------------------------------------------------------------------
+    // Instance variables
+    //
+
+    private XmlRegPopulator regPopulator = new XercesRegPopulator();
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/xml/Xerces2RegPopulator.java b/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/xml/Xerces2RegPopulator.java
new file mode 100644
index 0000000..2d26c1b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/xml/Xerces2RegPopulator.java
@@ -0,0 +1,527 @@
+package jpos.config.simple.xml;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.EntityResolver;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.DefaultHandler;
+
+import org.apache.xerces.jaxp.SAXParserFactoryImpl;
+
+import jpos.config.JposEntry;
+import jpos.config.JposConfigException;
+import jpos.config.simple.SimpleEntry;
+import jpos.util.JposEntryUtility;
+import jpos.util.tracing.Tracer;
+import jpos.util.tracing.TracerFactory;
+
+/**
+ * This class implements a SAX parser for the JCL XML DB supporting both:
+ * <ol>
+ * <li>DTD definition: jpos/res/jcl.dtd</li>
+ * <li>XML Schemas: jpos/res/jcl.xsd</li>
+ * </ol>
+ * <p>
+ * <b>NOTE</b>: this class must define a public no-argument ctor so that it may be 
+ * created via reflection when its defined in the jpos.properties as the 
+ * jpos.config.regPopulatorClass
+ * </p>
+ * @see jpos.util.JposProperties#JPOS_REG_POPULATOR_CLASS_PROP_NAME
+ * @since 2.1.0
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public class Xerces2RegPopulator extends AbstractXercesRegPopulator
+{
+    //-------------------------------------------------------------------------
+    // Ctor(s)
+    //
+
+    /**
+     * Default ctor
+     * @since 1.2 (NY 2K meeting)
+     */
+    public Xerces2RegPopulator() 
+    { super( XercesRegPopulator.class.getName() ); }
+
+    /**
+     * 1-arg constructor that takes the unique ID
+	 * @param s the unique ID string
+     * @since 2.1.0
+     */
+    public Xerces2RegPopulator( String s ) { super( s ); }
+
+    //-------------------------------------------------------------------------
+    // Public methods
+    //
+
+	/**
+	 * @return the fully qualified class name implementing the 
+	 * JposRegPopulator interface
+	 * @since 2.1.0
+	 */
+	public String getClassName() 
+	{ return Xerces2RegPopulator.class.getName(); }
+
+    /**
+     * Tell the populator to load the entries 
+     * @since 2.1.0
+     */
+    public void load()
+    {
+    	try
+    	{
+    		//<temp>NEED TO REPLACE WITH A METHOD THAT FIGURES OUT FILE NAME</temp>
+    		//<temp>needed to set file name</temp>
+    		InputStream is = getPopulatorFileIS();
+    		//<temp/>
+    		
+    		load( getPopulatorFileName() );    		
+    		//<temp/>
+    	}
+    	catch( Exception e )
+    	{
+    		tracer.println( "Error while loading populator file Exception.message: " + 
+    						e.getMessage() );
+    		lastLoadException = e;    		
+    	}
+    }
+
+    /**
+     * Loads the entries specified in the xmlFileName
+     * @param xmlFileName the XML file name
+     * @since 2.1.0
+     */
+    public void load( String xmlFileName )
+    {
+    	Reader reader = null;
+    	
+    	try
+    	{
+	    	reader = new FileReader( new File( xmlFileName ) );
+			InputSource inputSource = new InputSource( reader );
+			
+			XMLReader xmlReader = getSAXParser().getXMLReader();
+			
+			initXMLReader( xmlReader );
+						
+			xmlReader.setErrorHandler( errorHandler );
+			xmlReader.setContentHandler( contentHandler );
+			xmlReader.setEntityResolver( entityResolver );
+			
+			jposEntryList.clear();
+			lastLoadException = null;
+			
+			xmlReader.parse( inputSource );
+			
+			Iterator entries = jposEntryList.iterator();
+			while( entries.hasNext() )
+			{
+				JposEntry jposEntry = (JposEntry)entries.next();
+				getJposEntries().put( jposEntry.getLogicalName(), jposEntry );
+			}
+    	}
+    	catch( FileNotFoundException fne )
+    	{    		
+    		tracer.println( "Could not find file: " + xmlFileName );
+    		lastLoadException = fne;
+    	}
+    	catch( ParserConfigurationException pce )
+    	{
+    		tracer.println( "Could not create and configure SAX parser/factory" 
+    		                + pce.getMessage() );	
+    		lastLoadException = pce;
+    	}
+    	catch( IOException ioe )
+    	{
+    		tracer.println( "Error while parsing XML file:IOException.msg=" + 
+    		                ioe.getMessage() );	    		
+    		lastLoadException = ioe;
+    	}
+    	catch( SAXException se )
+    	{
+    		tracer.println( "Error creating or using the SAXParser:" + 
+    						"SAXException.message=" + se.getMessage() );	    		
+    		lastLoadException = se;
+    	}
+    	finally
+    	{
+    		try{ if( reader != null ) reader.close(); }
+    		catch( IOException ioe ) 
+    		{ 
+    			tracer.println( "load( " + xmlFileName + ") IOException.msg=" + 
+    			                ioe.getMessage() ); 
+    		}
+    	}
+    }
+
+	/**
+	 * @return the name of this populator.  
+	 * This should be a short descriptive name
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public String getName() { return XERCES2_REG_POPULATOR_NAME_STRING; }
+
+    //--------------------------------------------------------------------------
+    // Protected methods
+    //
+    
+    /**
+     * @return a SAXParser object creating and initializing SAXParserFactory
+     * and necessary objects if they are not yet created
+     * @since 2.1.0
+     * @throws javax.xml.parsers.ParserConfigurationException if the parser 
+     * factory not be properly configured
+     * @throws org.xml.sax.SAXException if the SAXParser could not be created
+     */
+    protected SAXParser getSAXParser() throws ParserConfigurationException,
+    											 SAXException
+    {
+    	if( saxParser == null )
+    	{	
+    		SAXParserFactory factory = new SAXParserFactoryImpl();
+		    saxParser = factory.newSAXParser();
+    	}
+  		
+  		return saxParser;
+    }
+
+	/**
+	 * Initializes XMLReader instance
+	 * @param xmlReader the XMLReader instance
+	 * @throws org.xml.sax.SAXException
+	 */
+	protected void initXMLReader( XMLReader xmlReader ) throws SAXException
+	{
+		xmlReader.setFeature( "http://xml.org/sax/features/namespaces", true );
+		xmlReader.setFeature( "http://xml.org/sax/features/validation", true );			
+	}
+    
+    //--------------------------------------------------------------------------
+    // Instance variables
+    //
+
+	private XMLReader xmlReader = null;
+	private SAXParser saxParser = null;
+    
+	private ErrorHandler errorHandler = this.new JposErrorHandler();
+	private ContentHandler contentHandler = this.new JposContentHandler();
+	private EntityResolver entityResolver = this.new JposEntityResolver();
+	
+	private List jposEntryList = new LinkedList();
+	
+	private Tracer tracer = TracerFactory.getInstance().
+	                         createTracer( "Xerces2RegPopulator", true );
+   
+    //--------------------------------------------------------------------------
+    // Public constants
+    //
+
+	public static final String XERCES2_REG_POPULATOR_NAME_STRING = 
+	                             "JCL XML Entries Populator 2";
+	
+	//--------------------------------------------------------------------------
+    // Inner classes
+    //
+
+    /**
+     * SAX XML Handler interface---essentially implements the XML parser/driver
+     * @author E. Michael Maximilien
+     */
+    protected class JposContentHandler extends DefaultHandler 
+    									 implements ContentHandler
+    {
+	    //----------------------------------------------------------------------
+	    // Public methods
+	    //
+	    
+	    public void startDocument() throws SAXException
+	    {
+	    	tracer.println( "<startDocument/>" );
+	    }
+
+	    public void endDocument() throws SAXException
+	    {
+	    	tracer.println( "<endDocument/>" );
+	    }
+	    
+		public void startElement( String namespaceUri, String localName, 
+	                               String qName, Attributes attributes ) 
+	                 throws SAXException
+	    {
+	    	tracer.println( "<startElement qName=\"" + qName + "\"/>" );
+
+	    	if( qName.equals( "JposEntries" ) )
+	    	{
+ 				jposEntryList.clear();    	
+	    		currentEntry = null;
+	    	}
+	    	else	    	
+	    	if( qName.equals( "JposEntry" ) )
+	    		currentEntry = createEntry( attributes );
+	    	else
+	    	if( qName.equals( "creation" ) )
+	    		addCreationProp( currentEntry, attributes );
+	    	else
+	    	if( qName.equals( "vendor" ) )
+	    		addVendorProp( currentEntry, attributes );
+	    	else
+	    	if( qName.equals( "jpos" ) )
+	    		addJposProp( currentEntry, attributes );
+	    	else
+	    	if( qName.equals( "product" ) )
+	    		addProductProp( currentEntry, attributes );
+	    	else
+	    	if( qName.equals( "prop" ) )
+	    		addProp( currentEntry, attributes );
+	    	else
+	    	{
+	    		tracer.println( "Invalid qName=" + qName );
+	    		throw new SAXException( "Invalid qName=" + qName );
+	    	}
+
+	    }
+
+	    public void endElement( String namespaceUri, String localName, 
+	                             String qName ) throws SAXException
+	    {
+	    	tracer.println( "<endElement qName=\"" + qName + "\"/>" );
+	    	
+	    	if( qName.equals( "JposEntry" ) )
+	    		jposEntryList.add( currentEntry );
+	    }
+
+	    //----------------------------------------------------------------------
+	    // Protected methods
+	    //
+
+	    protected JposEntry createEntry( Attributes attributes )
+	    throws SAXException
+	    {
+	    	String logicalName = attributes.getValue( "logicalName" );
+	    	
+	    	return new SimpleEntry( logicalName, Xerces2RegPopulator.this );
+	    }
+	    
+	    protected void addCreationProp( JposEntry entry, 
+	    								  Attributes attributes )
+		throws SAXException
+		{
+			String factoryClass = attributes.getValue( "factoryClass" );
+			String serviceClass = attributes.getValue( "serviceClass" );
+
+			//TODO: Check values
+			
+			currentEntry.addProperty( JposEntry.SI_FACTORY_CLASS_PROP_NAME, 
+									  factoryClass );
+			currentEntry.addProperty( JposEntry.SERVICE_CLASS_PROP_NAME, 
+									  serviceClass );
+		}	    								
+		
+		protected void addVendorProp( JposEntry entry, 
+	    								Attributes attributes )
+		throws SAXException
+		{
+			String factoryClass = attributes.getValue( "name" );
+			String serviceClass = attributes.getValue( "url" );
+
+			//TODO: Check values
+			
+			currentEntry.addProperty( JposEntry.VENDOR_NAME_PROP_NAME, 
+									  factoryClass );
+									  
+			currentEntry.addProperty( JposEntry.VENDOR_URL_PROP_NAME, 
+									  serviceClass );			
+		}	    								
+		
+	    protected void addJposProp( JposEntry entry, 
+	    							  Attributes attributes ) 
+	 	throws SAXException
+		{
+			String category = attributes.getValue( "category" );
+			String version = attributes.getValue( "version" );
+			
+			//TODO: Check values
+			
+			currentEntry.addProperty( JposEntry.DEVICE_CATEGORY_PROP_NAME,
+									  category );
+									  
+			currentEntry.addProperty( JposEntry.JPOS_VERSION_PROP_NAME, 
+									  version );						
+		}
+			    								
+	    protected void addProductProp( JposEntry entry, 
+	    								 Attributes attributes )
+		throws SAXException
+		{
+			String description = attributes.getValue( "description" );
+			String name = attributes.getValue( "name" );
+			String url = attributes.getValue( "url" );
+			
+			//TODO: Check values
+			
+			currentEntry.addProperty( JposEntry.PRODUCT_DESCRIPTION_PROP_NAME,
+									  description );
+									  
+			currentEntry.addProperty( JposEntry.PRODUCT_NAME_PROP_NAME,
+									  name );						
+			
+			currentEntry.addProperty( JposEntry.PRODUCT_URL_PROP_NAME,
+						  			  url );						
+		}
+			    								
+	    protected void addProp( JposEntry entry, 
+	    					      Attributes attributes )
+		throws SAXException
+		{
+			String name = attributes.getValue( "name" );
+			String valueString = attributes.getValue( "value" );
+			String typeString = attributes.getValue( "type" );
+			
+			if( typeString == null || typeString.equals( "" ) )
+				typeString = "String";
+
+			try
+			{
+			
+				Class typeClass = JposEntryUtility.
+				propTypeFromString( attributes.getValue( "type" ) );
+				
+				Object value = JposEntryUtility.parsePropValue( valueString, typeClass );
+				
+				//TODO: Check values
+			
+				JposEntry.Prop prop = currentEntry.
+									  createProp( name, value, typeClass );										      
+				currentEntry.add( prop );
+			}
+			catch( JposConfigException jce )
+			{
+				String msg = "Invalid prop: name=" + name + ":value=" + 
+							 valueString;
+				tracer.println( msg );
+				throw new SAXException( msg );
+			}
+		}	    								
+	    
+	    //----------------------------------------------------------------------
+	    // Instance variables
+	    //
+
+		private JposEntry currentEntry = null;	    
+    }
+    
+    /**
+     * JposEntityResolver to resolve XML schema
+     * @author E. Michael Maximilien
+     * @version 2.1.0
+     */
+	public class JposEntityResolver implements EntityResolver 
+	{
+		/**
+		 * @return the XML schema as an InputSource if it is found in a JAR
+		 * file in the CLASSPATH otherwise
+		 * return null
+		 */
+		public InputSource resolveEntity( String publicId, String systemId )
+   		{
+   			tracer.println( "JposEntityResolver:resolveEntity:publicId=" + 
+   							publicId );
+   							   			
+   			tracer.println( "JposEntityResolver:resolveEntity:systemId=" + 
+   							systemId );
+   		
+   			if( publicId.equals( getDoctypeValue() ) )
+   			{
+				InputStream is = 
+				getClass().getResourceAsStream( getDoctypeValue() );
+			
+				if( is != null ) 
+					return new InputSource( new InputStreamReader( is ) );
+   			}
+   			
+   			return null;
+     	}
+   }
+    
+    /**
+     * SAX XML Handler interface
+     * @author E. Michael Maximilien
+     */
+    protected class JposErrorHandler extends Object implements ErrorHandler
+    {
+	    //----------------------------------------------------------------------
+	    // Private/protected methods
+	    //
+	    
+	    private String createMessage( String header, SAXParseException spe )
+	    {
+			return header + "parsing XML file:SAXParseException.message = " + 
+	    	        spe.getMessage();
+	    }
+	    
+	    //----------------------------------------------------------------------
+	    // Public methods
+	    //
+	    
+	    public void error( SAXParseException spe ) throws SAXException
+	    {
+	    	String message = createMessage( "JposErrorHandler:Error:", spe );
+			tracer.print( message );
+			
+			throw new SAXException( message );	    	
+	    }
+	    
+	    public void fatalError( SAXParseException spe ) throws SAXException
+	    {
+	    	String message = createMessage( "JposErrorHandler:FatalError:", spe );
+			tracer.print( message );
+			
+			throw new SAXException( message );	    	
+	    }
+	    
+	    public void warning( SAXParseException spe ) throws SAXException
+	    {
+	    	String message = createMessage( "JposErrorHandler:Warning:", spe );
+			tracer.print( message );
+			
+			throw new SAXException( message );	    	
+	    }
+    }
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/xml/XercesRegPopulator.java b/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/xml/XercesRegPopulator.java
new file mode 100644
index 0000000..1a4d588
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/xml/XercesRegPopulator.java
@@ -0,0 +1,464 @@
+package jpos.config.simple.xml;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.io.*;
+import java.util.*;
+
+import java.io.FileInputStream;
+
+import org.w3c.dom.*;
+                  
+import org.xml.sax.InputSource;
+
+import jpos.config.*;
+import jpos.config.simple.*;
+import jpos.util.*;
+import jpos.util.tracing.Tracer;
+import jpos.util.tracing.TracerFactory;
+
+/**
+ * Simple implementation of the JposRegPopulator that loads and saves 
+ * the entries in XML using the "jpos/res/jcl.dtd" DTD and the XML4J 
+ * (Xerces) API 
+ * NOTE: this class must define a public no-argument ctor so that it may be 
+ * created via reflection when its defined in the jpos.properties as 
+ * the jpos.config.regPopulatorClass
+ * @see jpos.util.JposProperties#JPOS_REG_POPULATOR_CLASS_PROP_NAME
+ * @since 1.2 (NY 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public class XercesRegPopulator extends AbstractXercesRegPopulator
+{
+    //-------------------------------------------------------------------------
+    // Ctor(s)
+    //
+
+    /**
+     * Default ctor
+     * @since 1.2 (NY 2K meeting)
+     */
+    public XercesRegPopulator() 
+    { super( XercesRegPopulator.class.getName() ); }
+
+    /**
+     * 1-arg constructor that takes the unique ID
+	 * @param s the unique ID string
+     * @since 1.3 (Washington DC 2001)
+     */
+    public XercesRegPopulator( String s ) { super( s ); }
+
+    //-------------------------------------------------------------------------
+    // Public methods
+    //
+
+	/**
+	 * @return the fully qualified class name implementing the 
+	 * JposRegPopulator interface
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public String getClassName() 
+	{ return XercesRegPopulator.class.getName(); }
+
+    /**
+     * Tell the populator to load the entries 
+     * @since 1.2 (NY 2K meeting)
+     */
+    public void load()
+    {
+    	tracer.println( "load(): isPopulatorFileDefined=" + 
+    					isPopulatorFileDefined() );    	
+    	
+        if( isPopulatorFileDefined() == false )
+        {        	
+            getJposEntries().clear();
+            xmlFileName = DEFAULT_XML_FILE_NAME;
+			load( xmlFileName );
+
+            return;
+        }
+
+        try
+        {
+            getJposEntries().clear();
+
+            domParser.setEntityResolver(new XercesRegPopulator.JPOSDTDEntityResolver());
+
+            domParser.parse( new InputSource( getPopulatorFileIS() ) );
+
+            Document document = domParser.getDocument();
+
+            Enumeration entries = extractJposEntries( document );
+
+            while( entries.hasMoreElements() )
+            {
+                JposEntry jposEntry = (JposEntry)entries.nextElement();
+
+                if( jposEntry.hasPropertyWithName( JposEntry.
+                                                   LOGICAL_NAME_PROP_NAME ) )
+					getJposEntries().put( jposEntry.getLogicalName(), 
+					                      jposEntry );
+            }
+
+			lastLoadException = null;
+        }
+        catch( Exception e )
+        {
+			lastLoadException = e;
+			tracer.println( "Error loading XML file.  Exception.msg = " + 
+			                e.getMessage() ); 
+		}
+        finally
+        { }
+    }
+
+    /**
+     * Loads the entries specified in the xmlFileName
+     * @param xmlFileName the XML file name
+     * @since 1.3 (SF 2K meeting)
+     */
+    public void load( String xmlFileName )
+    {
+    	tracer.println( "load: xmlFileName=" + xmlFileName );
+    	
+		InputStream is = null;
+		File xmlFile = new File( xmlFileName );
+
+		try
+		{
+			if( xmlFile.exists() )
+				is = new FileInputStream( xmlFile );
+			else
+				is = findFileInClasspath( xmlFileName );
+			
+			if (is == null)
+			{
+				is = getClass().getClassLoader().getResourceAsStream(xmlFileName);
+			}
+
+			if( is == null )
+			{
+				getJposEntries().clear();
+
+				tracer.println( "Could not find file: " + xmlFileName + 
+				                " in path or CLASSPATH" );
+
+				lastLoadException = new FileNotFoundException( xmlFileName );
+				
+				return;
+			}
+
+			lastLoadException = null;
+		}
+		catch( Exception e )
+		{
+			lastLoadException = e;
+			tracer.println( "Error loading XML file.  Exception.message = " + 
+			                e.getMessage() ); 
+		}
+
+        try
+        {
+			getJposEntries().clear();
+
+            domParser.setEntityResolver(new XercesRegPopulator.JPOSDTDEntityResolver());
+
+            domParser.parse( new InputSource( is ) );
+            
+            Document document = domParser.getDocument();
+
+            Enumeration entries = extractJposEntries( document );
+
+            while( entries.hasMoreElements() )
+            {
+                JposEntry jposEntry = (JposEntry)entries.nextElement();
+
+                if( jposEntry.hasPropertyWithName( JposEntry.
+                                                   LOGICAL_NAME_PROP_NAME ) )
+                    getJposEntries().put( jposEntry.getLogicalName(),
+                                          jposEntry );
+            }
+
+			lastLoadException = null;
+
+        }
+        catch( Exception e )
+        {
+			lastLoadException = e;
+			tracer.println( "Error loading XML file.  Exception.message = " + 
+			                e.getMessage() ); 
+		}
+		finally
+        { }
+    }
+
+	/**
+	 * @return the name of this populator.  This should be a short descriptive name
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public String getName() { return XERCES_REG_POPULATOR_NAME_STRING; }
+
+    //--------------------------------------------------------------------------
+    // Protected methods
+    //
+
+    /**
+     * @return an enumeration of JposEntry objects read from the XML document object
+     * @param document the XML document object
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected Enumeration extractJposEntries( Document document )
+    {
+        Vector entries = new Vector();
+
+		NodeList nodeList = document.getElementsByTagName( "JposEntry" );
+
+		String currentEntryLogicalName = "";
+
+		try
+		{
+			for( int i = 0; i < nodeList.getLength(); ++i )
+			{
+				Node node = nodeList.item( i );
+
+				if( node.getNodeType() != Node.ELEMENT_NODE )
+					continue;
+
+				JposEntry jposEntry = new SimpleEntry();
+
+				Element jposEntryElement = (Element)node;
+
+				currentEntryLogicalName = jposEntryElement.
+				                          getAttribute( "logicalName" );
+				jposEntry.addProperty( "logicalName", currentEntryLogicalName );
+
+				NodeList childList = nodeList.item( i ).getChildNodes();
+
+				for( int j = 0; j < childList.getLength(); ++j )
+				{
+					Node child = childList.item( j );
+
+					if( child.getNodeType() != Node.ELEMENT_NODE )
+						continue;
+
+					Element element = (Element)child;
+
+					String elementName = element.getNodeName();
+
+					if( elementName.equals( "creation" ) )
+						extractCreationAttr( jposEntry, element );
+					else
+					if( elementName.equals( "vendor" ) )
+						extractVendorAttr( jposEntry, element );
+					else
+					if( elementName.equals( "jpos" ) )
+						extractJposAttr( jposEntry, element );
+					else
+					if( elementName.equals( "product" ) )
+						extractProductAttr( jposEntry, element );
+					else
+						extractPropAttr( jposEntry, element );
+				}
+
+				if( JposEntryUtility.isValidJposEntry( jposEntry ) )
+					entries.addElement( jposEntry );
+				else
+				{
+					String msg = "JposEntry with logicalName: " + 
+					             currentEntryLogicalName +
+					             " is not valid (missing required properties)";
+					throw new JposConfigException( msg );
+				}
+			}
+		}
+		catch( JposConfigException jce )
+		{
+			tracer.println( "Skipping invalid entry with logicalName: " + 
+			                currentEntryLogicalName );
+			tracer.println( "--->JposConfigException.message = " + 
+			                jce.getMessage() );
+
+			tracer.print( jce );
+			
+			if( jce.getOrigException() != null ) 
+				tracer.print( jce.getOrigException() );
+		}
+
+        return entries.elements();
+    }
+
+    /**
+     * Get the <creation> element attributes and adds corresponding 
+     * properties to JposEntry
+     * @param jposEntry the entry to add properties to
+     * @param element the <creation> XML element
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected void extractCreationAttr( JposEntry jposEntry, Element element )
+    {
+        jposEntry.addProperty( "serviceInstanceFactoryClass", 
+                               element.getAttribute( "factoryClass" ) );
+                               
+        jposEntry.addProperty( "serviceClass", 
+                               element.getAttribute( "serviceClass" ) );
+    }
+
+    /**
+     * Get the <vendor> element attributes and adds corresponding 
+     * properties to JposEntry
+     * @param jposEntry the entry to add properties to
+     * @param element the <vendor> XML element
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected void extractVendorAttr( JposEntry jposEntry, Element element )
+    {
+        jposEntry.addProperty( "vendorName", element.getAttribute( "name" ) );
+        jposEntry.addProperty( "vendorURL", element.getAttribute( "url" ) );
+    }
+
+    /**
+     * Get the <jpos> element attributes and adds corresponding properties 
+     * to JposEntry
+     * @param jposEntry the entry to add properties to
+     * @param element the <jpos> XML element
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected void extractJposAttr( JposEntry jposEntry, Element element )
+    {
+        jposEntry.addProperty( "jposVersion", 
+                               element.getAttribute( "version" ) );
+                               
+        jposEntry.addProperty( "deviceCategory", 
+                               element.getAttribute( "category" ) );
+    }
+
+    /**
+     * Get the <product> element attributes and adds corresponding 
+     * properties to JposEntry
+     * @param jposEntry the entry to add properties to
+     * @param element the <product> XML element
+     * @since 1.2 (NY 2K meeting)
+     */
+    protected void extractProductAttr( JposEntry jposEntry, Element element )
+    {
+        jposEntry.addProperty( "productName", element.getAttribute( "name" ) );
+        
+        jposEntry.addProperty( "productDescription", 
+                               element.getAttribute( "description" ) );
+        
+        jposEntry.addProperty( "productURL", element.getAttribute( "url" ) );
+    }
+
+    /**
+     * Get the <prop> element attributes and adds corresponding properties 
+     * to JposEntry
+     * @param jposEntry the entry to add properties to
+     * @param element the <prop> XML element
+     * @since 1.2 (NY 2K meeting)
+	 * @throws jpos.config.JposConfigException if the property value does 
+	 * not match the type or is not a valid value (like for instance 
+	 * an invalid number)
+     */
+    protected void extractPropAttr( JposEntry jposEntry, Element element ) 
+    throws JposConfigException
+    {
+		String propName = element.getAttribute( "name" );
+		String propValueString = element.getAttribute( "value" );
+		String propTypeString = element.getAttribute( "type" );
+
+		if( propTypeString.equals( "" ) ) propTypeString = "String";
+
+		Object propValue = null;
+		Class propType = null;
+
+		try
+		{
+			propType = Class.forName( ( propTypeString.
+			                            startsWith( "java.lang." ) ? 
+			                            propTypeString :
+			                            "java.lang." + propTypeString ) ); 
+		}
+		catch( ClassNotFoundException cnfe )
+		{ 
+			throw new JposConfigException( "Invalid property type: " + 
+			                                propTypeString + 
+			                                " for property named: " + 
+			                                propName , cnfe ); 
+		}
+
+		if( JposEntryUtility.isValidPropType( propType ) == false )
+			throw new JposConfigException( "Invalid property type: " + 
+											propTypeString + 
+											" for property named: " + 
+											propName );
+
+		propValue = JposEntryUtility.
+		            parsePropValue( propValueString, propType );
+
+		if( JposEntryUtility.validatePropValue( propValue, propType ) == false )
+			throw new JposConfigException( "Invalid property type: " + 
+			                                propTypeString + 
+			                                " for property named: " + 
+			                                propName );
+
+        jposEntry.add( jposEntry.createProp( propName, propValue, propType ) );
+    }
+    
+    /**
+     * JposDTDEntityResolver to resolve DTD
+     */
+    public class JPOSDTDEntityResolver implements org.xml.sax.EntityResolver
+    {
+        /**
+		 * @return the DTD as an InputSource if it is found in a JAR
+		 * file in the CLASSPATH otherwise return null
+		 */
+        public org.xml.sax.InputSource resolveEntity(String publicId, String systemId) throws org.xml.sax.SAXException, java.io.IOException
+        {
+            if (publicId.equals("-//JavaPOS//DTD//EN"))
+            {
+				InputStream is = getClass().getResourceAsStream( DTD_JAR_FILE_NAME );
+                    
+				if (is != null)
+				{
+					return (new org.xml.sax.InputSource(new InputStreamReader(is)));
+				}
+			}
+            
+            return null;
+        }
+        
+    }
+    
+    //--------------------------------------------------------------------------
+    // Instance variables
+    //
+
+    private Tracer tracer = TracerFactory.getInstance().
+                             createTracer( "XercesRegPopulator" );
+
+    //--------------------------------------------------------------------------
+    // Public constants
+    //
+
+    public static final String DTD_JAR_FILE_NAME = "/jpos/res/jcl.dtd";
+
+	public static final String XERCES_REG_POPULATOR_NAME_STRING = 
+	                             "JCL XML Entries Populator";
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/xml/XmlRegPopulator.java b/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/xml/XmlRegPopulator.java
new file mode 100644
index 0000000..ee3af98
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/config/simple/xml/XmlRegPopulator.java
@@ -0,0 +1,40 @@
+package jpos.config.simple.xml;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import jpos.config.JposRegPopulator;
+
+/**
+ * Defines an interface to load, save JposEntries
+ * @since 1.2 (NY 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface XmlRegPopulator extends JposRegPopulator
+{
+    //-------------------------------------------------------------------------
+    // Class constants
+    //
+
+    /**
+     * Default name to save entries if the XML populator is chosen but
+     * no populator file is specified
+     * @since 1.2 (NY 2K meeting)
+     */
+    public static final String DEFAULT_XML_FILE_NAME = "jpos.xml";
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/epson/EpsonLineDisplayConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/epson/EpsonLineDisplayConst.java
new file mode 100644
index 0000000..c79f06f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/epson/EpsonLineDisplayConst.java
@@ -0,0 +1,48 @@
+package jpos.epson;
+
+public abstract interface EpsonLineDisplayConst {
+	// Field descriptor #4 I
+	public static final int DISP_DI_OUTPUT = 100;
+
+	// Field descriptor #4 I
+	public static final int DISP_DI_GRAPHIC = 101;
+
+	// Field descriptor #4 I
+	public static final int DISP_DI_SETLINESPACE = 102;
+
+	// Field descriptor #4 I
+	public static final int DISP_DI_SETFONT = 103;
+
+	// Field descriptor #4 I
+	public static final int DISP_DI_GETMODE = 104;
+
+	// Field descriptor #4 I
+	public static final int DISP_DI_GW_STYLE = 105;
+
+	// Field descriptor #4 I
+	public static final int DISP_DI_MODE_CHARACTER = 0;
+
+	// Field descriptor #4 I
+	public static final int DISP_DI_MODE_GRAPHICS = 1;
+
+	// Field descriptor #4 I
+	public static final int DISP_DI_FONT_A = 0;
+
+	// Field descriptor #4 I
+	public static final int DISP_DI_FONT_B = 1;
+
+	// Field descriptor #4 I
+	public static final int DISP_DI_GW_NORMAL = 0;
+
+	// Field descriptor #4 I
+	public static final int DISP_DI_GW_TRANSPARENT = 1;
+
+	// Field descriptor #4 I
+	public static final int DISP_DI_DUMMY = 0;
+
+	// Field descriptor #4 I
+	public static final int UPOS_EDISP_TOOMANYDEFGLYPH = 3001;
+
+	// Field descriptor #4 I
+	public static final int UPOS_EDISP_TOOMANYWINDOW = 3002;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/epson/EpsonPOSPrinterConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/epson/EpsonPOSPrinterConst.java
new file mode 100644
index 0000000..df2d17f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/epson/EpsonPOSPrinterConst.java
@@ -0,0 +1,392 @@
+package jpos.epson;
+
+public abstract interface EpsonPOSPrinterConst {
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_GET_SUPPORT_FUNCTION = 1;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_BINARY_CONVERSION = 2;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_CODE128_TYPE = 3;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_OUTPUT_NORMAL = 100;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_OUTPUT_REALTIME = 101;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_PANEL_SWITCH = 110;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_RECOVER_ERROR = 120;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_HARDWARE_RESET = 121;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_PRINT_FLASH_BITMAP = 200;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_PRINT_FLASH_BITMAP2 = 201;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_DELETE_NVIMAGE = 210;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_SELECT_SLIP = 300;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_SLIP_EMPHASIS = 310;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_LABEL_SET_PRINT_MODE = 400;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_LABEL_SET_COUNT_MODE = 401;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_LABEL_PRINT_COUNT = 402;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_LABEL_SET_COUNT_VALUE = 403;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_DELAYED_CUT = 500;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_CUT_AND_FEED_TOF = 501;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_RING_BUZZER = 600;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_GET_BATTERY_STATUS = 610;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_SELECT_PAGE_MODE = 700;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_SET_PAPERLAYOUT = 710;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_GET_PAPERLAYOUT = 711;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_OPERATION_MODE = 750;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_RING_BUZZER_WITH_TIME = 800;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_SET_BITMAP_PRINTING_TYPE = 1500;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_SOUND_MELODY = 1200;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_SET_SLIP_ROTATE_FONT_TYPE = 1700;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_PRINT_FRANKING = 1800;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_GET_OFFLINE_CONDITION = 1900;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_SELECT_SLIP_PAPER_TYPE = 2000;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_DUMMY = 0;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_VALIDATION = 1;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_EMPHASIS = 2;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_LABEL = 4;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_BLACK_MARK = 8;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_GB18030 = 16;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_PEELER = 32;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_BATTERY = 64;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_SOUTHASIA = 128;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_BC_NONE = 0;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_BC_NIBBLE = 1;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_BC_DECIMAL = 2;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_CODE_A = 0;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_CODE_B = 1;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_CODE_C = 2;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_DELETE_ALL = -1;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_SLIP_FULLSLIP = 0;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_SLIP_VALIDATION = 1;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_DISABLE_EMPHASIS = 0;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_ENABLE_EMPHASIS = 1;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_LABEL_RIGHT_SPACE = 0;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_LABEL_RIGHT_ZERO = 1;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_LABEL_LEFT_SPACE = 2;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_POWERED_BY_AC = 256;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_POWERED_BY_BATTERY = 512;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_BATTERY_FULL = 16;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_BATTERY_NEAR_MIDDLE = 128;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_BATTERY_MIDDLE = 8;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_BATTERY_NEAR_LOW = 64;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_BATTERY_LOW = 32;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_BATTERY_NEAR_EMPTY = 4;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_BATTERY_CLOSE_EMPTY = 2;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_BATTERY_REMOVED = 1;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_NORMAL_DOT_PAGE_MODE = 0;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_HALF_DOT_PAGE_MODE = 1;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_BITMAP_PRINTING_NORMAL = 0;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_BITMAP_PRINTING_MULTI_TONE = 1;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_SOUND_PATTERN_1 = 1;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_SOUND_PATTERN_2 = 2;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_SOUND_PATTERN_3 = 3;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_SOUND_PATTERN_4 = 4;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_SOUND_PATTERN_5 = 5;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_SOUND_PATTERN_ERROR = 100;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_SOUND_PATTERN_NOPAPER = 101;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_ROTATE_FONT_A = 0;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_ROTATE_FONT_B = 1;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_CONDITION_ONLINE = 0;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_CONDITION_RECEIPT_ONLY_OFFLINE = 1;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_CONDITION_SLIP_ONLY_OFFLINE = 2;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_CONDITION_OFFLINE_EXECUTE = 3;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_CONDITION_RECOVERBLE = 4;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_CONDITION_UNRECOVERBLE = 5;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_SLIP_PAPER_NORMAL = 1;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_SLIP_PAPER_COPY = 2;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_OPERATION_MODE_SERIAL = 0;
+
+	// Field descriptor #4 I
+	public static final int PTR_DI_OPERATION_MODE_PEEL_OFF = 1;
+
+	// Field descriptor #4 I
+	public static final int PTR_DIE_RESPONSE = 0;
+
+	// Field descriptor #4 I
+	public static final int PTR_DIE_SET_BITMAP_MODE = 110;
+
+	// Field descriptor #4 I
+	public static final int PTR_DIE_BUTTON_OPERATION = 210;
+
+	// Field descriptor #4 I
+	public static final int PTR_DIE_LABEL_REMOVAL = 211;
+
+	// Field descriptor #4 I
+	public static final int PTR_DIE_LABEL_REMOVE_OK = 212;
+
+	// Field descriptor #4 I
+	public static final int PTR_DIE_LABEL_JAM = 213;
+
+	// Field descriptor #4 I
+	public static final int PTR_DIE_MEMORY = 1;
+
+	// Field descriptor #4 I
+	public static final int PTR_DIE_VRAM = 2;
+
+	// Field descriptor #4 I
+	public static final int PTR_DIE_NVRAM = 3;
+
+	// Field descriptor #4 I
+	public static final int PTR_SUE_POWERED_BY_AC = 100001;
+
+	// Field descriptor #4 I
+	public static final int PTR_SUE_POWERED_BY_BATTERY = 100002;
+
+	// Field descriptor #4 I
+	public static final int PTR_SUE_BATTERY_FULL = 100003;
+
+	// Field descriptor #4 I
+	public static final int PTR_SUE_BATTERY_NEAR_MIDDLE = 100009;
+
+	// Field descriptor #4 I
+	public static final int PTR_SUE_BATTERY_MIDDLE = 100004;
+
+	// Field descriptor #4 I
+	public static final int PTR_SUE_BATTERY_NEAR_LOW = 100010;
+
+	// Field descriptor #4 I
+	public static final int PTR_SUE_BATTERY_LOW = 100011;
+
+	// Field descriptor #4 I
+	public static final int PTR_SUE_BATTERY_NEAR_EMPTY = 100005;
+
+	// Field descriptor #4 I
+	public static final int PTR_SUE_BATTERY_CLOSE_EMPTY = 100006;
+
+	// Field descriptor #4 I
+	public static final int PTR_SUE_BATTERY_OK = 100007;
+
+	// Field descriptor #4 I
+	public static final int PTR_SUE_BATTERY_REMOVED = 100008;
+
+	// Field descriptor #4 I
+	public static final int UPOS_EPTR_UNRECOVERABLE = 5001;
+
+	// Field descriptor #4 I
+	public static final int UPOS_EPTR_CUTTER = 5002;
+
+	// Field descriptor #4 I
+	public static final int UPOS_EPTR_MECHANICAL = 5003;
+
+	// Field descriptor #4 I
+	public static final int UPOS_EPTR_AUTOMATICAL = 5004;
+
+	// Field descriptor #4 I
+	public static final int UPOS_EPTR_LABEL_JAM = 5005;
+
+	// Field descriptor #4 I
+	public static final int UPOS_EPTR_LABEL_REMOVAL = 5006;
+
+	// Field descriptor #4 I
+	public static final int UPOS_EPTR_BUTTON_OPERATION = 5007;
+
+	// Field descriptor #4 I
+	public static final int UPOS_EPTR_POWER_OFF = 5008;
+
+	// Field descriptor #4 I
+	public static final int UPOS_EPTR_RESTART = 5009;
+
+	// Field descriptor #4 I
+	public static final int UPOS_EPTR_INITIALIZING = 5010;
+
+	// Field descriptor #4 I
+	public static final int UPOS_EPTR_CLEAR = 5011;
+
+	// Field descriptor #4 I
+	public static final int UPOS_EPTR_REMOVE_BUTTON = 5012;
+
+	// Field descriptor #4 I
+	public static final int UPOS_EPTR_FIRMWARE_UPDATING = 5013;
+
+	// Field descriptor #4 I
+	public static final int UPOS_EPTR_FIRMWARE_PROCESS = 5014;
+
+	// Field descriptor #4 I
+	public static final int PTR_BARCODE_TYPE_NONE = 0;
+
+	// Field descriptor #4 I
+	public static final int PTR_BARCODE_TYPE_1D = 1;
+
+	// Field descriptor #4 I
+	public static final int PTR_BARCODE_TYPE_2D = 2;
+
+	// Field descriptor #4 I
+	public static final int PTR_BARCODE_TYPE_TEXT = 3;
+
+	// Field descriptor #4 I
+	public static final int PTR_BARCODE_TYPE_COMPOSIT = 4;
+
+	// Field descriptor #4 I
+	public static final int PTR_BARCODE_TYPE_OTHER = 5;
+
+	// Field descriptor #4 I
+	public static final int PTR_BARCODE_TYPE_UNKNOWN = 99;
+
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/events/DataEvent.java b/org.eclipse.osbp.fork.jpos/src/jpos/events/DataEvent.java
new file mode 100644
index 0000000..e25efb1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/events/DataEvent.java
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO 
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, 
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR 
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS 
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+// 
+// DataEvent
+//
+//   Class defining the Data Event generated by JavaPOS device 
+//   controls.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.events;
+
+public class DataEvent extends JposEvent
+{
+    public DataEvent(Object source, int status)
+    {
+        super(source);
+
+        this.status = status;
+    }
+
+    public int getStatus()
+    {
+        return status;
+    }
+
+    protected int status;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/events/DataListener.java b/org.eclipse.osbp.fork.jpos/src/jpos/events/DataListener.java
new file mode 100644
index 0000000..989687f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/events/DataListener.java
@@ -0,0 +1,26 @@
+/////////////////////////////////////////////////////////////////////
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO 
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, 
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR 
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS 
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+// 
+// DataListener
+//
+//   Interface to implement to support JavaPOS Data Events.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.events;
+
+public interface DataListener extends java.util.EventListener
+{
+    public void dataOccurred(DataEvent e);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/events/DirectIOEvent.java b/org.eclipse.osbp.fork.jpos/src/jpos/events/DirectIOEvent.java
new file mode 100644
index 0000000..122017f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/events/DirectIOEvent.java
@@ -0,0 +1,64 @@
+/////////////////////////////////////////////////////////////////////
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO 
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, 
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR 
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS 
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+// 
+// DirectIOEvent
+//
+//   Class defining the DirectIO Event generated by JavaPOS device 
+//   controls.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.events;
+
+public class DirectIOEvent extends JposEvent
+{
+    public DirectIOEvent(Object source, int eventNumber, int data, 
+                         Object object)
+    {
+        super(source);
+
+        this.eventNumber = eventNumber;
+        this.data = data;
+        this.object = object;
+    }
+
+    public int getEventNumber()
+    {
+        return eventNumber;
+    }
+
+    public int getData()
+    {
+        return data;
+    }
+
+    public void setData(int data)
+    {
+        this.data = data;
+    }
+
+    public Object getObject()
+    {
+        return object;
+    }
+
+    public void setObject(Object object)
+    {
+        this.object = object;
+    }
+
+    protected int    eventNumber;
+    protected int    data;
+    protected Object object;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/events/DirectIOListener.java b/org.eclipse.osbp.fork.jpos/src/jpos/events/DirectIOListener.java
new file mode 100644
index 0000000..a9caa69
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/events/DirectIOListener.java
@@ -0,0 +1,26 @@
+/////////////////////////////////////////////////////////////////////
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO 
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, 
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR 
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS 
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+// 
+// DirectIOListener
+//
+//   Interface to implement to support JavaPOS DirectIO Events.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.events;
+
+public interface DirectIOListener extends java.util.EventListener
+{
+    public void directIOOccurred(DirectIOEvent e);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/events/ErrorEvent.java b/org.eclipse.osbp.fork.jpos/src/jpos/events/ErrorEvent.java
new file mode 100644
index 0000000..4fe143b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/events/ErrorEvent.java
@@ -0,0 +1,66 @@
+/////////////////////////////////////////////////////////////////////
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO 
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, 
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR 
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS 
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+// 
+// ErrorEvent
+//
+//   Class defining the Error Event generated by JavaPOS device 
+//   controls.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.events;
+
+public class ErrorEvent extends JposEvent
+{
+    public ErrorEvent(Object source, int errorCode, int errorCodeExtended,
+                      int errorLocus, int errorResponse)
+    {
+        super(source);
+
+        this.errorCode = errorCode;
+        this.errorCodeExtended = errorCodeExtended;
+        this.errorLocus = errorLocus;
+        this.errorResponse = errorResponse;
+    }
+
+    public int getErrorCode()
+    {
+        return errorCode;
+    }
+
+    public int getErrorCodeExtended()
+    {
+        return errorCodeExtended;
+    }
+
+    public int getErrorLocus()
+    {
+        return errorLocus;
+    }
+
+    public int getErrorResponse()
+    {
+        return errorResponse;
+    }
+
+    public void setErrorResponse(int errorResponse)
+    {
+        this.errorResponse = errorResponse;
+    }
+
+    protected int errorCode;
+    protected int errorCodeExtended;
+    protected int errorLocus;
+    protected int errorResponse;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/events/ErrorListener.java b/org.eclipse.osbp.fork.jpos/src/jpos/events/ErrorListener.java
new file mode 100644
index 0000000..fb26261
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/events/ErrorListener.java
@@ -0,0 +1,26 @@
+/////////////////////////////////////////////////////////////////////
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO 
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, 
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR 
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS 
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+// 
+// ErrorListener
+//
+//   Interface to implement to support JavaPOS Error Events.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.events;
+
+public interface ErrorListener extends java.util.EventListener
+{
+    public void errorOccurred(ErrorEvent e);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/events/JposEvent.java b/org.eclipse.osbp.fork.jpos/src/jpos/events/JposEvent.java
new file mode 100644
index 0000000..0f9ac9b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/events/JposEvent.java
@@ -0,0 +1,57 @@
+/////////////////////////////////////////////////////////////////////
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// JposEvent
+//
+//   Base class for all events generated by JavaPOS device controls.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+// 98-11-02 Added getSequenceNumber() method.                     BS
+// 99-10-04 Added initialization of when field.                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.events;
+
+public abstract class JposEvent extends java.util.EventObject
+{
+    public JposEvent(Object source)
+    {
+        super(source);
+        updateSequenceNumber();
+        when = System.currentTimeMillis();
+    }
+
+    public synchronized final void updateSequenceNumber()
+    {
+        sequenceNumber = incrSequenceNumber();
+    }
+
+    public static final synchronized long incrSequenceNumber()
+    {
+        return ++globalSequenceNumber;
+    }
+
+    public final long getSequenceNumber()
+    {
+      return sequenceNumber;
+    }
+
+    public long getWhen()
+    {
+        return when;
+    }
+
+    protected      long   sequenceNumber;
+    private static long   globalSequenceNumber = 0;
+    private        long   when;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/events/OutputCompleteEvent.java b/org.eclipse.osbp.fork.jpos/src/jpos/events/OutputCompleteEvent.java
new file mode 100644
index 0000000..ec4c13e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/events/OutputCompleteEvent.java
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO 
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, 
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR 
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS 
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+// 
+// OutputCompleteEvent
+//
+//   Class defining the Output Complete Event generated by JavaPOS 
+//   device controls.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.events;
+
+public class OutputCompleteEvent extends JposEvent
+{
+    public OutputCompleteEvent(Object source, int outputID)
+    {
+        super(source);
+
+        this.outputID = outputID;
+    }
+
+    public int getOutputID()
+    {
+        return(outputID);
+    }
+
+    protected int outputID;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/events/OutputCompleteListener.java b/org.eclipse.osbp.fork.jpos/src/jpos/events/OutputCompleteListener.java
new file mode 100644
index 0000000..687fbcb
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/events/OutputCompleteListener.java
@@ -0,0 +1,27 @@
+/////////////////////////////////////////////////////////////////////
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO 
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, 
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR 
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS 
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+// 
+// OutputCompleteListener
+//
+//   Interface to implement to support JavaPOS Output Complete
+//   Events.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.events;
+
+public interface OutputCompleteListener extends java.util.EventListener
+{
+    public void outputCompleteOccurred(OutputCompleteEvent e);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/events/StatusUpdateEvent.java b/org.eclipse.osbp.fork.jpos/src/jpos/events/StatusUpdateEvent.java
new file mode 100644
index 0000000..4504854
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/events/StatusUpdateEvent.java
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO 
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, 
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR 
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS 
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+// 
+// StatusUpdateEvent
+//
+//   Class defining the Status Update Event generated by JavaPOS 
+//   device controls.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.events;
+
+public class StatusUpdateEvent extends JposEvent
+{
+    public StatusUpdateEvent(Object source, int status)
+    {
+        super(source);
+
+        this.status = status;
+    }
+
+    public int getStatus()
+    {
+        return status;
+    }
+
+    protected int status;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/events/StatusUpdateListener.java b/org.eclipse.osbp.fork.jpos/src/jpos/events/StatusUpdateListener.java
new file mode 100644
index 0000000..f2bcf34
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/events/StatusUpdateListener.java
@@ -0,0 +1,26 @@
+/////////////////////////////////////////////////////////////////////
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO 
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, 
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR 
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS 
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+// 
+// StatusUpdateListener
+//
+//   Interface to implement to support JavaPOS Status Update Events.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.events;
+
+public interface StatusUpdateListener extends java.util.EventListener
+{
+    public void statusUpdateOccurred(StatusUpdateEvent e);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/events/TransitionEvent.java b/org.eclipse.osbp.fork.jpos/src/jpos/events/TransitionEvent.java
new file mode 100644
index 0000000..11f6439
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/events/TransitionEvent.java
@@ -0,0 +1,66 @@
+/////////////////////////////////////////////////////////////////////
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// TransitionEvent
+//
+// Class defining the Transition Event generated by the JavaPOS
+// Electronic Value RW control.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.events;
+
+public class TransitionEvent extends JposEvent
+{
+    public TransitionEvent(Object source,
+                           int    eventNumber,
+                           int    data,
+                           String string)
+    {
+        super(source);
+
+        this.eventNumber = eventNumber;
+        this.data = data;
+        this.string = string;
+    }
+
+    public int getEventNumber()
+    {
+        return eventNumber;
+    }
+
+    public int getData()
+    {
+        return data;
+    }
+
+    public void setData(int data)
+    {
+        this.data = data;
+    }
+
+    public String getString()
+    {
+        return string;
+    }
+
+    public void setString(String string)
+    {
+        this.string = string;
+    }
+
+    protected int    eventNumber;
+    protected int    data;
+    protected String string;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/events/TransitionListener.java b/org.eclipse.osbp.fork.jpos/src/jpos/events/TransitionListener.java
new file mode 100644
index 0000000..4eb53f2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/events/TransitionListener.java
@@ -0,0 +1,26 @@
+/////////////////////////////////////////////////////////////////////
+//
+// THIS SOFTWARE IS PROVIDED AS IS. THE JAVAPOS WORKING GROUP MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+// NON-INFRINGEMENT.  INDIVIDUAL OR CORPORATE MEMBERS OF THE JAVAPOS
+// WORKING GROUP SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED AS A RESULT
+// OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+//
+// TransitionListener
+//
+// Interface to implement to support JavaPOS Transition Events.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.events;
+
+public interface TransitionListener extends java.util.EventListener
+{
+    public void transitionOccurred(TransitionEvent e);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/loader/JposLoaderException.java b/org.eclipse.osbp.fork.jpos/src/jpos/loader/JposLoaderException.java
new file mode 100644
index 0000000..8a1dc30
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/loader/JposLoaderException.java
@@ -0,0 +1,54 @@
+package jpos.loader;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import jpos.JposException;
+
+/**
+ * Defines an Exception class for JCL loader related classes/interfaces and 
+ * implementing classes
+ * @since 2.0.0
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public class JposLoaderException extends JposException
+{
+	//-------------------------------------------------------------------------
+	// Ctor(s)
+	// 
+	
+	/**
+	 * Creates a JposLoaderException with the description passed
+	 * @param description the description String
+	 */
+    public JposLoaderException( String description )
+    {
+        super( 0, description );
+    }
+
+	/**
+	 * Creates a JposLoaderException with the description passed and 
+	 * the original exception that caused this one
+	 * @param description the description String
+	 * @param origException the exception that originally caused this one
+	 */
+    public JposLoaderException( String description, Exception origException )
+    {
+        super( 0, description, origException );
+    }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/loader/JposServiceBinder.java b/org.eclipse.osbp.fork.jpos/src/jpos/loader/JposServiceBinder.java
new file mode 100644
index 0000000..dddff06
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/loader/JposServiceBinder.java
@@ -0,0 +1,84 @@
+/*
+ *                                                                            
+ *  Copyright (c) 2011 - 2016 - Loetz GmbH & Co KG, 69115 Heidelberg, Germany 
+ *                                                                            
+ *  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                                 
+ *                                                                            
+ *  Initial contribution:                                                      
+ *     Loetz GmbH & Co. KG
+ * 
+ */
+package jpos.loader;
+
+import java.util.Hashtable;
+
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
+import org.slf4j.Logger;
+
+/**
+ * The JposServiceBinder to concrete vendor implementations.
+ * Please provide a vendor specific implementation of interface {@link JposServiceInstanceFactory}.
+ * Simply create a plug-in bundle containing all vendor jars in a folder, 
+ * export all necessary packages and supply a component description in the OSGI-INF folder that
+ * provides the service of interface {@link JposServiceInstanceFactory}.
+ * For Epson the component xml looks like this:
+ * <?xml version="1.0" encoding="UTF-8"?>
+ * <scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="jp.co.epson.uposcommon.creator.EpsonJposServiceInstanceFactory">
+ * <implementation class="jp.co.epson.uposcommon.creator.EpsonJposServiceInstanceFactory"/>
+ * <service>
+ *    <provide interface="jpos.loader.JposServiceInstanceFactory"/>
+ * </service>
+ * </scr:component>
+ */
+@Component
+public class JposServiceBinder {
+
+	/** The log. */
+	private static Logger log = org.slf4j.LoggerFactory
+			.getLogger(jpos.loader.JposServiceBinder.class);
+
+	/** The si instance factory map. */
+    private static Hashtable<String, JposServiceInstanceFactory> siFactoryTable = new Hashtable<>();
+
+	/**
+	 * Bind factory service.
+	 *
+	 * @param siInstanceFactory
+	 *            the serviceInstanceFactory
+	 */
+	@Reference(cardinality = ReferenceCardinality.MULTIPLE, policy = ReferencePolicy.DYNAMIC)
+	public synchronized void bindFactoryService(final JposServiceInstanceFactory siInstanceFactory) {
+		JposServiceBinder.siFactoryTable.put(siInstanceFactory.getClass().getCanonicalName(), siInstanceFactory);
+		log.debug("Jpos ServiceInstanceFactory "+siInstanceFactory.getClass().getCanonicalName()+" added");
+	}
+
+	/**
+	 * Unbind factory service.
+	 *
+	 * @param siInstanceFactory
+	 *            the serviceInstanceFactory
+	 */
+	public synchronized void unbindFactoryService(
+			final JposServiceInstanceFactory siInstanceFactory) {
+		if(JposServiceBinder.siFactoryTable.contains(siInstanceFactory)) {
+			JposServiceBinder.siFactoryTable.remove(siInstanceFactory.getClass().getCanonicalName());
+		}
+		log.debug("Jpos ServiceInstanceFactory "+siInstanceFactory.getClass().getCanonicalName()+" removed");
+	}
+
+	/**
+	 * Gets the serviceInstanceFactory.
+	 *
+	 * @return serviceInstanceFactory
+	 */
+	public static Hashtable<String, JposServiceInstanceFactory> getSiFactoryTable() {
+		return JposServiceBinder.siFactoryTable;
+	}
+
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/loader/JposServiceConnection.java b/org.eclipse.osbp.fork.jpos/src/jpos/loader/JposServiceConnection.java
new file mode 100644
index 0000000..3e6d4bd
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/loader/JposServiceConnection.java
@@ -0,0 +1,56 @@
+package jpos.loader;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import jpos.JposException;
+
+/**
+ * Interface defining a JposServiceConnection.  Used to connect, disconnect
+ * and access a JavaPOS service
+ * @since 0.1 (Philly 99 meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface JposServiceConnection 
+{
+    /** 
+     * @return the JposService associated with this connection 
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public JposServiceInstance getService();
+
+    /**
+     * @return the logical name of the JposService associated with this connection
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public String getLogicalName();
+
+    /**
+     * Tries to make the connection with the associated JposService
+     * @since 0.1 (Philly 99 meeting)
+     * @throws jpos.JposException if any errors occurs with trying to make this connection
+     */
+    public void connect() throws JposException;
+
+    /**
+     * Tries to end the connection with the associated service
+     * @since 0.1 (Philly 99 meeting)
+     * @throws jpos.JposException if any errors occurs with trying to end this connection
+     */
+    public void disconnect() throws JposException;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/loader/JposServiceInstance.java b/org.eclipse.osbp.fork.jpos/src/jpos/loader/JposServiceInstance.java
new file mode 100644
index 0000000..1254ad9
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/loader/JposServiceInstance.java
@@ -0,0 +1,39 @@
+package jpos.loader;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import jpos.JposException;
+
+/**
+ * All services must implement this interface (it is also extended
+ * by the jpos.services.BaseService interface which must be implemented
+ * by all JavaPOS services).  The one method define in this interface
+ * is used to indicate to the service that its connection has been dropped
+ * @since 0.1 (Philly 99 meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface JposServiceInstance 
+{
+    /**
+     * Indicate the ServiceInstance that its connection has been dropped
+     * @since 0.1 (Philly 99 meeting)
+     * @throws jpos.JposException if any error occurs
+     */
+    public void deleteInstance() throws JposException;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/loader/JposServiceInstanceFactory.java b/org.eclipse.osbp.fork.jpos/src/jpos/loader/JposServiceInstanceFactory.java
new file mode 100644
index 0000000..81997fb
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/loader/JposServiceInstanceFactory.java
@@ -0,0 +1,43 @@
+package jpos.loader;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import jpos.JposException;
+import jpos.config.JposEntry;
+
+/**
+ * Defines the ServiceInstanceFactory.  Service providers must provide
+ * a class that implements this interface and that has a default ctor.
+ * The jpos.config implementation will use reflection to create an 
+ * instance of that class as the factory class and call its createInstance
+ * method to create the services
+ * @since 0.1 (Philly 99 meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface JposServiceInstanceFactory
+{
+    /**
+     * @return a JposServiceInstance using the logicalName and the entry provided
+     * @param logicalName the logicalName for the service
+     * @param entry the JposEntry instance containing info necessary for creating the service
+     * @since 0.1 (Philly 99 meeting)
+     * @throws jpos.JposException if any error occurs
+     */
+    public JposServiceInstance createInstance( String logicalName, JposEntry entry ) throws JposException;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/loader/JposServiceLoader.java b/org.eclipse.osbp.fork.jpos/src/jpos/loader/JposServiceLoader.java
new file mode 100644
index 0000000..a40649f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/loader/JposServiceLoader.java
@@ -0,0 +1,163 @@
+package jpos.loader;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import jpos.JposConst;
+import jpos.JposException;
+
+import jpos.util.*;
+import jpos.util.tracing.Tracer;
+import jpos.util.tracing.TracerFactory;
+
+import java.lang.reflect.*;
+
+/**
+ * The JavaPOS JposServiceLoader class.  It creates an instance of the 
+ * installed JposServiceFactory or default to the SimpleServiceFactory
+ * and is used by the controls to create JposServiceConnection object
+ * that are used to bind the controls to the actual loaded services.
+ * Modification history
+ * @since 0.1 (Philly 99 meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public final class JposServiceLoader extends Object
+{
+    //--------------------------------------------------------------------------
+    // Class variables
+    //
+
+	private static Tracer tracer = TracerFactory.getInstance().
+									 createTracer( "JposServiceLoader" );
+
+    private static JposServiceManager manager = null;
+
+    /**
+     * Static initializer.
+     * Creates the manager by getting the property 
+     * JPOS_SERVICE_MANAGER_CLASS_PROP_NAME.  If this property is not defined 
+     * then defaults to the SimpleServiceManager 
+     * NOTE: since the JposServiceManager interface was moved to the 
+     * jpos.loader package then we define 2 property to specify the custom
+     * serviceManager one with the previous jpos.config prefix and the other 
+     * with the correct jpos.loader prefix
+     * @see jpos.util.JposProperties#JPOS_SERVICE_MANAGER_CLASS_PROP_NAME
+     * @see jpos.util.JposProperties#JPOS_SERVICE_MANAGER_CLASS_PROP_NAME2
+     * @since 0.1 (Philly 99 meeting)
+     * @see jpos.loader.simple.SimpleServiceManager
+     */
+    static
+    {
+        JposProperties jposProperties = new DefaultProperties();
+        jposProperties.loadJposProperties();
+
+        boolean customManagerDefined = false;
+        String customManagerClassName = "";
+
+        if( jposProperties.isPropertyDefined( JposProperties.
+        	JPOS_SERVICE_MANAGER_CLASS_PROP_NAME ) )
+        {
+            customManagerDefined = true;
+            customManagerClassName = jposProperties.
+            getPropertyString( JposProperties.
+                               JPOS_SERVICE_MANAGER_CLASS_PROP_NAME );
+        }
+        else
+        if( jposProperties.isPropertyDefined( JposProperties.
+        	JPOS_SERVICE_MANAGER_CLASS_PROP_NAME2 ) )
+        {
+            customManagerDefined = true;
+            customManagerClassName = 
+            jposProperties.
+            getPropertyString( JposProperties.
+            				   JPOS_SERVICE_MANAGER_CLASS_PROP_NAME2 );
+        }
+
+        if( customManagerDefined )
+        {
+			tracer.println( "Custom manager is defined: className= " +
+							customManagerClassName );        	
+        	
+            try
+            {
+                Class managerClass = Class.forName( customManagerClassName );
+
+                Class arg1Class = Class.forName( "jpos.util.JposProperties" );
+                Class[] argsClass = { arg1Class };
+
+                Constructor oneArgCtor = managerClass.
+                                         getConstructor( argsClass );
+
+                Object[] args = { jposProperties };
+
+                manager = (JposServiceManager)oneArgCtor.newInstance( args );
+            }
+            catch( Exception e ) 
+            {
+                tracer.println( "Error creating instance of specified " +
+                                "jpos.config.serviceManagerClass class: " + 
+                                customManagerClassName );
+                                
+				tracer.println( "Using default manager class: " +
+								"jpos.loader.simple.SimpleServiceManager" );                                
+
+                manager = new jpos.loader.simple.
+                              SimpleServiceManager( jposProperties ); 
+            }
+        }
+        else
+            manager = new jpos.loader.simple.
+                          SimpleServiceManager( jposProperties );
+
+        manager.getEntryRegistry().load();
+        
+		tracer.println( "manager.getEntryRegistry().load() OK" );
+    }
+
+    /**
+     * @return a service connection for the logicalName specified
+     * @param logicalName the logical name of the service to find 
+     * @throws jpos.JposException if any error occurs     
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public static JposServiceConnection findService( String logicalName ) 
+    throws JposException
+    {
+        if( manager == null )
+        {
+        	String msg = "Did not find a valid " + 
+        	             JposProperties.JPOS_SERVICE_MANAGER_CLASS_PROP_NAME + 
+        	             " to create";
+
+			tracer.println( msg );
+        	        
+            throw new JposException( JposConst.JPOS_E_NOSERVICE, msg );
+        }
+
+		tracer.println( "findService: " + logicalName );
+
+        return manager.createConnection( logicalName );
+    }
+
+    /**
+     * @return the JposServiceManager associated with the 
+     * running of the JposServiceLoader      
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public static JposServiceManager getManager() { return manager; }
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/loader/JposServiceManager.java b/org.eclipse.osbp.fork.jpos/src/jpos/loader/JposServiceManager.java
new file mode 100644
index 0000000..6473e51
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/loader/JposServiceManager.java
@@ -0,0 +1,93 @@
+package jpos.loader;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import jpos.JposException;
+
+import jpos.util.JposProperties;
+import jpos.config.JposEntryRegistry;
+import jpos.config.JposRegPopulator;
+import jpos.profile.Profile;
+import jpos.profile.ProfileRegistry;
+import jpos.profile.ProfileException;
+
+/**
+ * An implementation of the jpos.config must provide an implementation of
+ * this interface which is used to create the JposServiceConnection objects.
+ * This also provides a way to access the JposEntryPopulator to allow for
+ * dynamic updates of the currently configured JposEntry objects.
+ * @since 0.1 (Philly 99 meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface JposServiceManager
+{
+    /**
+     * @return a JposServiceConnection for the service with the logical name specified
+     * This should use the populator to see if there exist any entry with the logical
+     * name provided, get the entry and create the JposServiceConnection
+     * @since 0.1 (Philly 99 meeting)
+     * @throws jpos.JposException if an error occurs while creating this connection
+     */
+    public JposServiceConnection createConnection( String logicalName ) throws JposException;
+
+    /**
+     * @return the JposEntryRegistry object that this factory uses to allow entries to be
+     * querried and added dynamically
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public JposEntryRegistry getEntryRegistry();
+
+    /**
+     * @return the JposProperties object containing access to all Jpos properties
+     * @since 1.2 (NY 2K meeting)
+     */
+    public JposProperties getProperties();
+
+    /**
+     * @return the JposRegPopulator object used to populate the registry
+     * @since 1.2 (NY 2K meeting)
+     */
+    public JposRegPopulator getRegPopulator();
+
+    /**
+     * @return the ProfileRegistry currently loaded
+     * @since 1.3 (SF 2K meeting)
+     */
+    public ProfileRegistry getProfileRegistry();
+
+    /**
+	 * Tries to load the Profile by specified in the file.  If successful returns
+	 * it and adds it to the ProfileRegistry otherwise throw exception
+     * @return the profile specified in the XML profile file after loading it
+	 * @param xmlProfileFileName the file name for the XML profile
+	 * @exception jpos.profile.ProfileException if the profile could not be loaded from file
+     * @since 1.3 (SF 2K meeting)
+     */
+	public Profile loadProfile( String xmlProfileFileName ) throws ProfileException;
+
+	/** 
+	 * Ask the manager to reload the registry by reloading the properties file
+	 * creating a new registry and repopulating the registry.  Also creates sets
+	 * the JposRegPopulator for the registry as a side-effect
+	 * NOTE: this method should only be used if at runtime the properties and/or 
+	 * populator files have changed
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public void reloadEntryRegistry();
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/loader/Version.java b/org.eclipse.osbp.fork.jpos/src/jpos/loader/Version.java
new file mode 100644
index 0000000..90d86c5
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/loader/Version.java
@@ -0,0 +1,50 @@
+package jpos.loader;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Simple Version class indicating that prints out the curent version of the JCL
+ * @since 1.2 (NY 2K meeting)
+ * @author E. Michael Maximilien  (maxim@us.ibm.com)
+ */
+public final class Version extends Object
+{
+    /**
+     * Main entry point for the Version application
+     * @param args a String[] of arguments
+     * @since 1.2 (NY 2K meeting)
+     */
+    public static void main( String[] args )
+    {
+        System.out.println( "JavaPOS jpos.config/loader (JCL) version " + 
+							JCL_VERSION_STRING );
+    }
+
+    /**
+     * @return a String of the version number of the JCL
+     * @since 1.2 (NY 2K meeting)
+     */
+    public static String getVersionString() { return JCL_VERSION_STRING; }
+
+    //--------------------------------------------------------------------------
+    // Class variables
+    //
+
+    private static final String JCL_VERSION_STRING = "2.2.0";
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/loader/simple/SimpleServiceConnection.java b/org.eclipse.osbp.fork.jpos/src/jpos/loader/simple/SimpleServiceConnection.java
new file mode 100644
index 0000000..ba14b06
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/loader/simple/SimpleServiceConnection.java
@@ -0,0 +1,148 @@
+package jpos.loader.simple;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.util.*;
+import java.lang.reflect.*;
+
+import jpos.Activator;
+import jpos.JposConst;
+import jpos.JposException;
+import jpos.loader.*;
+import jpos.config.*;
+import jpos.util.tracing.Tracer;
+import jpos.util.tracing.TracerFactory;
+
+/**
+ * This is a simple implementation of the JposServiceConnection interface
+ * @since 0.1 (Philly 99 meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public class SimpleServiceConnection extends Object 
+									  implements JposServiceConnection
+{
+    /**
+     * Creates a new SimpleServiceConnection by passing the logicalName, 
+     * the associated JposEntry and JposServiceInstanceFactory
+     * @param logicalName the logicalName for this connection
+     * @param entry the JposEntry matching this logicalName
+     * @param siFactoryClassName the class name implememting the 
+     * JposServiceInstanceFactory interface    
+     * @since 0.1 (Philly 99 meeting)
+     */
+    SimpleServiceConnection( String logicalName, JposEntry entry, 
+                             String siFactoryClassName )
+    {
+        this.logicalName = logicalName;
+        this.entry = entry;
+        this.siFactoryClassName = siFactoryClassName;
+    }
+
+    /**
+     * @return the JposServiceInstance for this connection (it's null 
+     * util a succesful connection)
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public JposServiceInstance getService() { return service; }
+
+    /** 
+     * @return the logicalName of the JposServiceInstance of this connection
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public String getLogicalName() { return logicalName; }
+
+    /**
+     * Connects this service by trying to create the JposServiceInstance
+     * @since 0.1 (Philly 99 meeting)
+     * @throws jpos.JposException if the service throws a exception while
+     * disconnecting
+     */
+    public void connect() throws JposException
+    {
+        try 
+        {
+            Class[] parameterTypes = new Class[ 2 ];
+            parameterTypes[ 0 ] = Class.forName( "java.lang.String" );
+            parameterTypes[ 1 ] = Class.forName( "jpos.config.JposEntry");             
+
+            JposServiceInstanceFactory siFactory = null;
+
+            if( JposServiceBinder.getSiFactoryTable().containsKey( siFactoryClassName ) )
+                siFactory = JposServiceBinder.getSiFactoryTable().get( siFactoryClassName );
+            // the classic approach
+            else
+            {
+                Class<?> instanceClass = Class.forName( siFactoryClassName );
+                Constructor<?> defaultCtor = instanceClass.
+                						  getConstructor( new Class[ 0 ] );
+                siFactory = (JposServiceInstanceFactory)defaultCtor.
+                			newInstance( new Object[ 0 ] );
+                JposServiceBinder.getSiFactoryTable().put( siFactoryClassName, siFactory );
+            }
+
+            service = (JposServiceInstance)siFactory.
+            		  createInstance( logicalName, entry );
+        } 
+        catch( Exception e ) 
+        {
+        	String msg = "Could not connect to service with logicalName = " + 
+      				     logicalName + ": Exception.message=" + e.getMessage();
+        
+        	tracer.println( msg );
+        	 
+        	throw new JposException( JposConst.JPOS_E_NOSERVICE, msg, e ); 
+    	}
+    }
+
+    /**
+     * Disconnect this connection
+     * @since 0.1 (Philly 99 meeting)
+     * @throws jpos.JposException if the service throws a exception while disconnecting
+     */
+    public void disconnect() throws JposException 
+    {
+    	if( service != null )
+    	{
+	        service.deleteInstance();
+	        service = null;
+    	}
+        
+        tracer.println( "Disconnected to service OK" );
+    }
+
+    /**
+     * Add a finalizer method in case the service connection is garbage collected
+     * and the service of this connection has not been disconnected
+     * @since 0.1 (Philly 99 meeting)
+     * @throws jpos.JposException if the service throws a exception while disconnecting
+     */
+    protected void finalize() throws JposException { disconnect(); }
+
+    //--------------------------------------------------------------------------
+    // Instance variables
+    //
+
+    private JposServiceInstance service = null;
+    private JposEntry entry = null;
+    private String logicalName = null;
+    private String siFactoryClassName = null;
+    
+    private Tracer tracer = TracerFactory.getInstance().
+    						 createTracer( "SimpleServiceConnection" );
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/loader/simple/SimpleServiceManager.java b/org.eclipse.osbp.fork.jpos/src/jpos/loader/simple/SimpleServiceManager.java
new file mode 100644
index 0000000..4e54389
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/loader/simple/SimpleServiceManager.java
@@ -0,0 +1,272 @@
+package jpos.loader.simple;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import jpos.JposConst;
+import jpos.JposException;
+
+import jpos.loader.*;
+import jpos.config.*;
+import jpos.config.simple.*;
+import jpos.profile.*;
+import jpos.util.*;
+import jpos.util.tracing.Tracer;
+import jpos.util.tracing.TracerFactory;
+
+/**
+ * This is a simple implementation of the JposServiceManager interface
+ * @since 0.1 (Philly 99 meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public class SimpleServiceManager extends Object 
+implements JposServiceManager
+{
+	//--------------------------------------------------------------------------
+	// Ctor(s)
+	//
+
+    /**
+     * Default ctor
+     * NOTE: necessary because it will be used by jpos.config.JposServiceLoader 
+     * to create the simple factory
+     * @deprecated replaced by 1-argument ctor
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public SimpleServiceManager() 
+    { 
+        getProperties().loadJposProperties();
+        init(); 
+    }
+
+    /**
+     * One argument ctor
+     * @param properties the JposProperties for this manager
+     * NOTE: this could be an instance of the simple 
+     * jpos.loader.DefaultProperties or a this class could also create its own 
+     * JposProperties object
+     */
+    public SimpleServiceManager( JposProperties properties ) 
+    { 
+        jposProperties = properties;
+        init();
+    }
+
+    //--------------------------------------------------------------------------
+    // Private instance methods
+    //
+
+    /**
+     * Initializes all the manager objects
+     * @since 1.2 (NY 2K meeting)
+     */
+    private void init() { initEntryRegistry(); }
+
+    /**
+     * Initializes the registry object and also loads the property
+     * @since 1.3 (Washington DC 2001 meeting)
+     */
+    private void initEntryRegistry()
+    {
+        initRegPopulator();
+        entryRegistry = new SimpleEntryRegistry( regPopulator );
+	}
+
+    /**
+     * Initializes the JposRegPopulator to be used by this manager
+     * If the a JposRegPopulator is defined then try to use it otherwise use default
+     * @since 1.2 (NY 2K meeting)
+     */
+    private void initRegPopulator()
+    {
+		JposProperties properties = getProperties();
+
+        if( properties.isPropertyDefined( JposProperties.
+            JPOS_REG_POPULATOR_CLASS_PROP_NAME ) )
+        {
+			String regPopulatorClassName = properties.
+			       getPropertyString( JposProperties.
+			       JPOS_REG_POPULATOR_CLASS_PROP_NAME );
+
+            try
+            {
+                Class regPopulatorClass = Class.forName( regPopulatorClassName );
+
+                regPopulator = (JposRegPopulator)regPopulatorClass.newInstance();
+            }
+            catch( Exception e ) 
+			{
+				tracer.println( "Could not create populator by name: " + 
+				                regPopulatorClassName + " Exception.message= " +
+				                e.getMessage() );
+				regPopulator = new SimpleRegPopulator(); 
+			}
+        }
+        else
+		if( properties.hasMultiProperty( JposPropertiesConst.JPOS_CONFIG_POPULATOR_CLASS_MULTIPROP_NAME ) )
+			regPopulator = new DefaultCompositeRegPopulator();
+		else
+            regPopulator = new SimpleRegPopulator();
+    }
+    
+    /**
+     * @return the ProfileFactory (lazilly creating it, if necessary)
+     * @since 2.1.0
+     */
+    private ProfileFactory getProfileFactory()
+    {
+		if( profileFactory == null )
+			profileFactory = new XercesProfileFactory();
+		
+		return profileFactory;
+    }
+
+    //---------------------------------------------------------------------------
+    // Public instance methods
+    //
+
+    /**
+     * @return the JposEntryRegistry object 
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public JposEntryRegistry getEntryRegistry() { return entryRegistry; }
+
+    /**
+     * @return the JposProperties object containing access to all 
+     * Jpos properties
+     * @since 1.2 (NY 2K meeting)
+     */
+    public JposProperties getProperties() { return jposProperties; }
+
+    /**
+     * @return the JposRegPopulator object used to populate the registry
+     * @since 1.2 (NY 2K meeting)
+     */
+    public JposRegPopulator getRegPopulator() { return regPopulator; }
+
+    /**
+     * @return a ServiceConnection used to connect to the service
+     * @param logicalName the logical name of the service to find
+     * @since 0.1 (Philly 99 meeting)
+     * @throws jpos.config.JposException 
+     */
+    public JposServiceConnection createConnection( String logicalName ) 
+    throws JposException
+    {
+        JposServiceConnection sc = null;
+
+        try 
+        {
+            JposEntry jposEntry = (JposEntry)entryRegistry.
+                                  getJposEntry( logicalName );
+
+            if( jposEntry == null )
+                throw new JposException( JposConst.JPOS_E_NOEXIST, 
+                                          "Service does not exist in loaded JCL registry" );
+
+            String siFactoryClassName = 
+            (String)jposEntry.getPropertyValue( JposEntry.
+            									SI_FACTORY_CLASS_PROP_NAME );
+
+            sc = new SimpleServiceConnection( logicalName, 
+            								  jposEntry, 
+            								  siFactoryClassName );
+        }
+        catch( JposException je )
+        {
+        	tracer.println( "createConnection: JposException.msg=" + 
+        				    je.getMessage() );
+        	throw je;
+        } 
+        catch( Exception e ) 
+        { 
+        	tracer.println( "createConnection: Exception.msg=" + 
+        					e.getMessage() );        	
+        	throw new JposException( JposConst.JPOS_E_NOSERVICE, 
+        							  "Could not find service" ); 
+        }
+
+		return sc;
+	}
+
+    /**
+     * @return the current ProfileRegistry
+     * @since 1.3 (SF 2K meeting)
+     */
+	public ProfileRegistry getProfileRegistry() 
+	{
+		if( profileRegistry == null )
+			profileRegistry = new DefaultProfileRegistry();
+		 
+		return profileRegistry; 
+	}
+
+    /**
+	 * Tries to load the Profile by specified in the file.  If successful 
+	 * returns it and adds it to the ProfileRegistry otherwise throw exception
+     * @return the profile specified in the XML profile file after loading it
+	 * @param xmlProfileFileName the file name for the XML profile
+	 * @exception jpos.profile.ProfileException if the profile could not be 
+	 * loaded from file
+     * @since 1.3 (SF 2K meeting)
+     */
+	public Profile loadProfile( String xmlProfileFileName ) 
+	throws ProfileException 
+	{ 
+		Profile profile = getProfileFactory().
+						  createProfile( xmlProfileFileName );
+
+		if( profile != null )
+			profileRegistry.addProfile( profile );
+
+		return profile; 
+	}
+
+	/** 
+	 * Ask the manager to reload the registry by reloading the properties file
+	 * creating a new registry and repopulating the registry.  Also creates sets
+	 * the JposRegPopulator for the registry as a side-effect
+	 * NOTE: this method should only be used if at runtime the properties and/or 
+	 * populator files have changed
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public void reloadEntryRegistry()
+	{
+		getProperties().loadJposProperties();
+		initEntryRegistry();
+
+		getEntryRegistry().load();
+		
+		tracer.println( "Sucessfully reloaded registry" );
+	}
+
+    //--------------------------------------------------------------------------
+    // Instance variables
+    //
+
+    private JposRegPopulator regPopulator = null;
+    private SimpleEntryRegistry entryRegistry = null;
+	
+	private ProfileRegistry profileRegistry = null;
+	private ProfileFactory  profileFactory = null;
+
+    private JposProperties jposProperties = new DefaultProperties();
+    
+    private Tracer tracer = TracerFactory.getInstance().
+                             createTracer( "SimpleServiceManager" );
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/AbstractPropType.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/AbstractPropType.java
new file mode 100644
index 0000000..f411c89
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/AbstractPropType.java
@@ -0,0 +1,82 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.io.Serializable;
+
+/**
+ * Default implementation of the PropType
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public abstract class AbstractPropType extends Object 
+										 implements PropType, Serializable
+{
+	//-------------------------------------------------------------------------
+	// Ctor(s)
+	//
+
+	/** Default ctor */
+	AbstractPropType() {}
+
+	//-------------------------------------------------------------------------
+	// Public abstract methods
+	//
+
+	/** @return a String representation of this PropType */
+	public abstract String toString();
+
+	/** @return a Java class that defines this type */
+	public abstract Class getJavaTypeClass();
+
+	/**
+	 * @return true if the object passed is of this PropType
+	 * @param obj the Java Object
+	 */
+	public abstract boolean isValidValue( Object obj );
+
+	/**
+	 * @return true if the PropValue passed is of this PropType
+	 * @param propValue the PropValue
+	 */
+	public abstract boolean isValidValue( PropValue obj );
+
+	//-------------------------------------------------------------------------
+	// Public methods
+	//
+
+	/** @return a String description of this PropType (can be HTML text) */
+	public String getDescription() { return description; }
+
+	//-------------------------------------------------------------------------
+	// Package setter methods
+	//
+
+	/** 
+	 * Sets the String description of this PropType (can be HTML text) 
+	 * @param s the String
+	 */
+	void setDescription( String s ) { description = s; }
+
+	//-------------------------------------------------------------------------
+	// Instance variables
+	//
+
+	private String description = "";
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/BooleanPropType.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/BooleanPropType.java
new file mode 100644
index 0000000..83d1bfc
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/BooleanPropType.java
@@ -0,0 +1,83 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.io.Serializable;
+
+/**
+ * Defines a Boolean property type
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public class BooleanPropType extends AbstractPropType implements PropType, Serializable
+{
+	//-------------------------------------------------------------------------
+	// Ctor(s)
+	//
+
+	/** Default ctor */
+	BooleanPropType() {}
+
+	//---------------------------------------------------------------------
+	// Class methods
+	//
+
+	/** @return the unique instance of this class (create if necessary) */
+	public static PropType getInstance()
+	{
+		if( instance == null )
+			instance = new BooleanPropType();
+
+		return instance;
+	}
+
+	//-------------------------------------------------------------------------
+	// Public methods
+	//
+
+	/** @return a String representation of this PropType */
+	public String toString() { return "BooleanPropType"; }
+
+	/** @return a Java class that defines this type */
+	public Class getJavaTypeClass() { return ( new Boolean( false ) ).getClass(); }
+
+	/**
+	 * @return true if the object passed is of this PropType
+	 * @param boolean the boolean primitive type
+	 */
+	public boolean isValidValue( boolean b ) { return true; }
+
+	/**
+	 * @return true if the object passed is of this PropType
+	 * @param obj the Java Object
+	 */
+	public boolean isValidValue( Object obj ) { return ( obj instanceof Boolean ); }
+
+	/**
+	 * @return true if the PropValue passed is of this PropType
+	 * @param propValue the PropValue
+	 */
+	public boolean isValidValue( PropValue propValue ) { return isValidValue( propValue.getValue() ); }
+
+	//-------------------------------------------------------------------------
+	// Class instance
+	//
+
+	private static PropType instance = null;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/CharacterPropType.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/CharacterPropType.java
new file mode 100644
index 0000000..362e10f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/CharacterPropType.java
@@ -0,0 +1,83 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.io.Serializable;
+
+/**
+ * Defines a Character property type
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public class CharacterPropType extends AbstractPropType implements PropType, Serializable
+{
+	//-------------------------------------------------------------------------
+	// Ctor(s)
+	//
+
+	/** Default ctor */
+	CharacterPropType() {}
+
+	//---------------------------------------------------------------------
+	// Class methods
+	//
+
+	/** @return the unique instance of this class (create if necessary) */
+	public static PropType getInstance()
+	{
+		if( instance == null )
+			instance = new CharacterPropType();
+
+		return instance;
+	}
+
+	//-------------------------------------------------------------------------
+	// Public methods
+	//
+
+	/** @return a String representation of this PropType */
+	public String toString() { return "CharacterPropType"; }
+
+	/** @return a Java class that defines this type */
+	public Class getJavaTypeClass() { return ( new Character( 'c' ) ).getClass(); }
+
+	/**
+	 * @return true if the object passed is of this PropType
+	 * @param char the char primitive type
+	 */
+	public boolean isValidValue( char c ) { return true; }
+
+	/**
+	 * @return true if the object passed is of this PropType
+	 * @param obj the Java Object
+	 */
+	public boolean isValidValue( Object obj ) { return ( obj instanceof Character ); }
+
+	/**
+	 * @return true if the PropValue passed is of this PropType
+	 * @param propValue the PropValue
+	 */
+	public boolean isValidValue( PropValue propValue ) { return isValidValue( propValue.getValue() ); }
+
+	//-------------------------------------------------------------------------
+	// Class instance
+	//
+
+	private static PropType instance = null;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultDevCatInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultDevCatInfo.java
new file mode 100644
index 0000000..ca99db8
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultDevCatInfo.java
@@ -0,0 +1,90 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Default implementation of the DevCatInfo interface
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+class DefaultDevCatInfo extends Object implements DevCatInfo
+{
+	//-------------------------------------------------------------------------
+	// Ctor(s)
+	//
+
+	/**
+	 * Creates a DevCatInfo with the <Profile, DevCat> parameter
+	 * @param profile the Profile
+	 * @param devCat the DevCat
+	 */
+	DefaultDevCatInfo( Profile profile, DevCat devCat )
+	{
+		this.profile = profile;
+		this.devCat = devCat;
+	}
+
+	//-------------------------------------------------------------------------
+	// Public methods
+	//
+
+	/** @return the Profile associated with this DevCatInfo */
+	public Profile getProfile() { return profile; }
+
+	/** @return the DevCat */
+	public DevCat getDevCat() { return devCat; }
+
+	/** @return the list of standard properties for this DevCat */
+	public PropInfoList getStandardProps() { return standardProps; }
+
+	/** @return the list of required properties for this DevCat */
+	public PropInfoList getRequiredProps() { return requiredProps; }
+
+	/** @return the list of optional properties for this DevCat */
+	public PropInfoList getOptionalProps() { return optionalProps; }
+
+	/** @return the String representation of this DevCat */
+	public String toString()
+	{
+		StringBuffer sb = new StringBuffer();
+
+		sb.append( "<DevCatInfo>\n" );
+		sb.append( "   <Profile name = " + profile.getName() + 
+				        " vendorName = " + profile.getVendorName() + "/>\n" );
+		sb.append( "   <DevCat name = " + devCat.toString() + "/>\n" ); 
+		sb.append( "</DevCatInfo>\n" );
+
+		return sb.toString();
+	}
+
+	//-------------------------------------------------------------------------
+	// Package methods
+	//
+
+	//-------------------------------------------------------------------------
+	// Instance variables
+	//
+
+	private Profile profile = null;
+	private DevCat devCat = null;
+
+	private PropInfoList standardProps = new DefaultPropInfoList();
+	private PropInfoList requiredProps = new DefaultPropInfoList();
+	private PropInfoList optionalProps = new DefaultPropInfoList();
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultDevCatInfoList.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultDevCatInfoList.java
new file mode 100644
index 0000000..cce6353
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultDevCatInfoList.java
@@ -0,0 +1,111 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.util.*;
+
+/**
+ * Defines a simple list of DevCatInfo objects
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien
+ */
+class DefaultDevCatInfoList extends Object implements DevCatInfoList
+{
+	//-------------------------------------------------------------------------
+	// Ctor(s)
+	//
+
+	/** Default ctor */
+	public DefaultDevCatInfoList() {}
+
+	//-------------------------------------------------------------------------
+	// Public methods
+	//
+
+	/** @return the current size of this list */
+	public int getSize() { return list.size(); }
+
+	/** @return true if this list is empty */
+	public boolean isEmpty() { return list.isEmpty(); }
+
+	/**
+	 * Adds a new DevCatInfo to this list
+	 * @param devCatInfo the devCatInfo to add
+	 */
+	public void add( DevCatInfo devCatInfo ) { list.add( devCatInfo ); }
+
+	/**
+	 * Removes the DevCatInfo to this list
+	 * @param devCatInfo the devCatInfo to remove
+	 */
+	public void remove( DevCatInfo devCatInfo ) { list.remove( devCatInfo ); }
+
+	/** Removes all DevCatInfo in this list */
+	public void removeAll() { list.clear(); }
+
+	/**
+	 * @return true if the DevCatInfo is already in the list
+	 * @param devCatInfo the devCatInfo
+	 */
+	public boolean contains( DevCatInfo devCatInfo ) { return list.contains( devCatInfo ); }
+
+	/** @return an DevCatInfoList.Iterator object for this list */
+	public DevCatInfoList.Iterator iterator() { return this.new DefaultIterator(); }
+
+	//-------------------------------------------------------------------------
+	// Inner interfaces
+	//
+
+	/**
+	 * Simple interface to iterate through the list
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 * @since 1.3 (SF 2K meeting)
+	 */
+	class DefaultIterator extends Object implements DevCatInfoList.Iterator
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Default ctor */
+		DefaultIterator() { iterator = list.iterator(); }
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the next DevCatInfo in the iterator */
+		public DevCatInfo next() { return (DevCatInfo)iterator.next(); }
+
+		/** @return true if there is a next DevCatInfo in the iterator */
+		public boolean hasNext() { return iterator.hasNext(); }
+
+		//---------------------------------------------------------------------
+		// Instance variables
+		//
+
+		private java.util.Iterator iterator = null;
+	}
+
+	//-------------------------------------------------------------------------
+	// Instance variables
+	//
+
+	private List list = new ArrayList();
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultDevCatV.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultDevCatV.java
new file mode 100644
index 0000000..602f84d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultDevCatV.java
@@ -0,0 +1,169 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Defines a default a Visitor interface for the DevCat hiearchy
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public class DefaultDevCatV extends Object implements DevCatVisitor
+{
+	//-------------------------------------------------------------------------
+	// Public methods
+	//
+
+	/**
+	 * Visits a  DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitBumpBar( DevCat devCat ) {}
+
+	/**
+	 * Visits a CashChanger DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitCashChanger( DevCat devCat ) {}
+
+	/**
+	 * Visits a CashDrawer DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitCashDrawer( DevCat devCat ) {}
+
+	/**
+	 * Visits a CheckScanner DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitCheckScanner( DevCat devCat ) {}
+
+	/**
+	 * Visits a CAT DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitCAT( DevCat devCat ) {}
+
+	/**
+	 * Visits a CoinDispenser DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitCoinDispenser( DevCat devCat ) {}
+
+	/**
+	 * Visits a FiscalPrinter DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitFiscalPrinter( DevCat devCat ) {}
+
+	/**
+	 * Visits a HardTotals DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitHardTotals( DevCat devCat ) {}
+
+	/**
+	 * Visits a Keylock DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitKeylock( DevCat devCat ) {}
+
+	/**
+	 * Visits a LineDisplay DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitLineDisplay( DevCat devCat ) {}
+
+	/**
+	 * Visits a MICR DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitMICR( DevCat devCat ) {}
+
+	/**
+	 * Visits a MotionSensor DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitMotionSensor( DevCat devCat ) {}
+
+	/**
+	 * Visits a MSR DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitMSR( DevCat devCat ) {}
+
+	/**
+	 * Visits a Pinpad DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitPinpad( DevCat devCat ) {}
+
+	/**
+	 * Visits a POSKeyboard DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitPOSKeyboard( DevCat devCat ) {}
+
+	/**
+	 * Visits a POSPower DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitPOSPower( DevCat devCat ) {}
+
+	/**
+	 * Visits a POSPrinter DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitPOSPrinter( DevCat devCat ) {}
+
+	/**
+	 * Visits a RemoteOrderDisplay DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitRemoteOrderDisplay( DevCat devCat ) {}
+
+	/**
+	 * Visits a Scanner DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitScanner( DevCat devCat ) {}
+
+	/**
+	 * Visits a SignatureCapture DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitSignatureCapture( DevCat devCat ) {}
+
+	/**
+	 * Visits a Scale DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitScale( DevCat devCat ) {}
+
+	/**
+	 * Visits a ToneIndicator DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitToneIndicator( DevCat devCat ) {}
+
+	/**
+	 * Visits a PointCardRW DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitPointCardRW( DevCat devCat ) {}	
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultProfile.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultProfile.java
new file mode 100644
index 0000000..24fa18e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultProfile.java
@@ -0,0 +1,124 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.io.Serializable;
+import java.net.URL;
+
+/**
+ * Defines a Profile which is an abstract definition of a set of JposEntry 
+ * objects and each entry's required set of properties
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+class DefaultProfile extends Object implements Profile, Serializable
+{
+	//-------------------------------------------------------------------------
+	// Ctor(s)
+	//
+
+	/** 
+	 * Creates a profile with name passed
+	 * @param name the Profile's name
+	 */
+	DefaultProfile( String name ) { this.name = name; }
+
+	//-------------------------------------------------------------------------
+	// Public methods
+	//
+
+	/** @return the unique name of this profile */
+	public String getName() { return name; }
+
+	/** @return the version of this profile */
+	public String getVersion() { return version; }
+
+	/** @return a String description of this profile */
+	public String getDescription() { return description; }
+
+	/** @return the vendor name of this profile */
+	public String getVendorName() { return vendorName; }
+
+	/** @return the URL for this vendor */
+	public URL getVendorUrl() { return vendorUrl; }
+
+	/** @return the list of DevCatInfo for this profile */
+	public DevCatInfoList getDevCatInfoList() { return devCatInfoList; }
+
+	//-------------------------------------------------------------------------
+	// Public overridden methods
+	// 
+
+	/** @return a String representation of this Profile */
+	public String toString()
+	{
+		StringBuffer sb = new StringBuffer();
+
+		sb.append( "<Profile name='" + getName() + "'>\n" );
+
+		sb.append( "    <ProfileInfo version='" + getVersion() + "' vendorName='" + getVendorName() + "'\n" );
+		sb.append( "                 vendorUrl=" + ( getVendorUrl() == null ? "'null'" : "'" + getVendorUrl().toString() + "'" ) + "\n" );
+		sb.append( "                 description='" + getDescription() + "'/>\n" );
+
+		sb.append( "</Profile>" );
+
+		return sb.toString();
+	}
+
+	//-------------------------------------------------------------------------
+	// Package setter methods
+	//
+
+	/** 
+	 * Sets the the version of this profile 
+	 * @param s the String object
+	 */
+	void setVersion( String s ) { version = s; }
+
+	/**
+	 * @return a String description of this profile
+	 * @param s the String
+	 */
+	void setDescription( String s ) { description = s; }
+
+	/**
+	 * Sets the vendorName
+	 * @param s the String vendor name
+	 */
+	void setVendorName( String s ) { vendorName = s; }
+
+	/**
+	 * Sets the URL for this vendor
+	 * @param url the URL
+	 */
+	void setVendorUrl( URL url ) { vendorUrl = url; }
+
+	//-------------------------------------------------------------------------
+	// Instance variables
+	// 
+
+	private String name = "";
+	private String version = "";
+	private String description = "";
+
+	private String vendorName = "";
+	private URL vendorUrl = null;
+
+	private DevCatInfoList devCatInfoList = new DefaultDevCatInfoList();
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultProfileRegistry.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultProfileRegistry.java
new file mode 100644
index 0000000..4aa8651
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultProfileRegistry.java
@@ -0,0 +1,98 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.util.*;
+
+/**
+ * Default implementation of the ProfileRegistry using a Hashtable
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public class DefaultProfileRegistry extends Object implements ProfileRegistry
+{
+	//-------------------------------------------------------------------------
+	// Ctor(s)
+	//
+
+	/** Default ctor*/
+	public DefaultProfileRegistry() {}
+
+	//-------------------------------------------------------------------------
+	// Public methods
+	//
+
+	/** @return the size of the registry */
+	public int getSize() { return table.size(); }
+
+	/** @return true if the registry is empty or not */
+	public boolean isEmpty() { return table.isEmpty(); }
+
+    /**
+     * @return true if there is an Profile with the specified logical name
+     * @param profileName the unique name of this profile
+     */
+    public boolean hasProfile( String profileName ) { return table.containsKey( profileName ); }
+
+    /**
+     * @return true if there is an Profile with the specified logical name
+     * @param profile the profile
+     */
+    public boolean hasProfile( Profile profile ) { return table.containsValue( profile ); }
+
+    /** @return an enumeration of Profile objects  */
+    public Enumeration getProfiles() { return table.elements(); }
+
+    /**
+     * @return the Profile for the profileName specified
+     * @param profileName the unique name of this profile
+     */
+    public Profile getProfile( String profileName ) { return (Profile)table.get( profileName ); }
+
+    /**
+     * Add an Profile for the service with logical name specified
+     * @param profile the profile
+     */
+    public void addProfile( Profile profile ) { table.put( profile.getName(), profile ); }
+
+    /**
+     * Add an Profile for the service with logical name specified
+     * @param profileName the unique name of this profile
+     * @param profile the profile
+     */
+    public void addProfile( String profileName, Profile profile ) { table.put( profileName, profile ); }
+
+    /**
+     * Removes the specified Profile 
+     * @param profile the profile to remove
+     */
+    public void removeProfile( Profile profile ) { table.remove( profile.getName() ); }
+
+    /**
+     * Removes the Profile with the profileName specified 
+     * @param profileName the unique name of this profile
+     */
+    public void removeProfile( String profileName ) { table.remove( profileName ); }
+
+	//-------------------------------------------------------------------------
+	// Instance varaibles
+	//
+
+	private Hashtable table = new Hashtable();
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultPropInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultPropInfo.java
new file mode 100644
index 0000000..c589b34
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultPropInfo.java
@@ -0,0 +1,129 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.io.Serializable;
+
+/**
+ * Default implementation of the PropInfo interface
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+class DefaultPropInfo extends Object implements PropInfo, Serializable
+{
+	//-------------------------------------------------------------------------
+	// Ctor(s)
+	//
+
+	/**
+	 * Creates a PropInfo with name and profile passed
+	 * @param name the PropInfo name
+	 * @param profile the Profile for this PropInfo
+	 */
+	public DefaultPropInfo( String name, Profile profile )
+	{
+		this.name = name;
+		this.profile = profile;
+	}
+							
+	//-------------------------------------------------------------------------
+	// Public methods
+	//
+
+	/** @return the Profile associated with this PropInfo */
+	public Profile getProfile() { return profile; }
+
+	/** @return the name of this property (MUST be unique per profile) */
+	public String getName() { return name; }
+
+	/** @return the type of this property */
+	public PropType getType() { return type; }
+
+	/** @return the default value for this property */
+	public PropValue getDefaultValue() { return defaultValue; }
+
+	/** @return the list of possible values for this property */
+	public PropValueList getValues() { return values; }
+
+	/** @return the DevCat that this property can be applied to */
+	public DevCat getDevCat() { return devCat; }
+
+	/** @return the PropInfoViewer for this property */
+	public PropInfoViewer getViewer() { return viewer; }
+
+	/** @return a description of this PropInfo (this can be HTML formated) */
+	public String getDescription() { return description; }
+
+	/** @return a short description of this PropInfo (this can be HTML formated) */
+	public String getShortDescription() { return shortDescription; }
+
+	//-------------------------------------------------------------------------
+	// Package setter methods
+	//
+
+	/**
+	 * Sets the type of this property 
+	 * @param type the PropType
+	 */
+	void setType( PropType type ) { this.type = type; }
+
+	/**
+	 * Sets the default value for this property
+	 * @param propValue the PropValue
+	 */
+	void setDefaultValue( PropValue value ) { defaultValue = value; }
+
+	/** 
+	 * Sets the DevCat that this property can be applied to 
+	 * @param devCat the DevCat
+	 */
+	void setDevCat( DevCat devCat ) { this.devCat = devCat; }
+
+	/**
+	 * Sets the PropInfoViewer for this property 
+	 * @param viewer the PropInfoViewer
+	 */
+	void setViewer( PropInfoViewer viewer ) { this.viewer = viewer; }
+
+	/**
+	 * Sets the description of this PropInfo (this can be HTML formated) 
+	 * @param s the String
+	 */
+	void setDescription( String s ) { description = s; } 
+
+	/**
+	 * Sets a short description of this PropInfo used as TootipText (this can be HTML formated)
+	 * @param s the String
+	 */
+	void setShortDescription( String s ) { shortDescription = s; }
+
+	//-------------------------------------------------------------------------
+	// Instance variables
+	//
+
+	private Profile profile = null;
+	private String name = "";
+	private PropType type = null;
+	private PropValue defaultValue = null;
+	private PropValueList values = new DefaultPropValueList();
+	private DevCat devCat = null;
+	private PropInfoViewer viewer = null;
+	private String description = "";
+	private String shortDescription = "";
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultPropInfoList.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultPropInfoList.java
new file mode 100644
index 0000000..b85bc93
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultPropInfoList.java
@@ -0,0 +1,111 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.util.*;
+
+/**
+ * Defines a simple list of PropInfo objects
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+class DefaultPropInfoList extends Object implements PropInfoList
+{
+	//-------------------------------------------------------------------------
+	// Ctor(s)
+	//
+
+	/** Default ctor */
+	public DefaultPropInfoList() {}
+
+	//-------------------------------------------------------------------------
+	// Public methods
+	//
+
+	/** @return the current size of this list */
+	public int getSize() { return list.size(); }
+
+	/** @return true if this list is empty */
+	public boolean isEmpty() { return list.isEmpty(); }
+
+	/**
+	 * Adds a new PropInfo to this list
+	 * @param propInfo the propInfo to add
+	 */
+	public void add( PropInfo propInfo ) { list.add( propInfo ); }
+
+	/**
+	 * Removes the PropInfo to this list
+	 * @param propInfo the propInfo to remove
+	 */
+	public void remove( PropInfo propInfo ) { list.remove( propInfo ); }
+
+	/** Removes all PropInfo in this list */
+	public void removeAll() { list.clear(); }
+
+	/**
+	 * @return true if the PropInfo is already in the list
+	 * @param propInfo the propInfo
+	 */
+	public boolean contains( PropInfo propInfo ) { return list.contains( propInfo ); }
+
+	/** @return an PropInfoList.Iterator object for this list */
+	public PropInfoList.Iterator iterator() { return this.new DefaultIterator(); }
+
+	//-------------------------------------------------------------------------
+	// Inner interfaces
+	//
+
+	/**
+	 * Simple interface to iterate through the list
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 * @since 1.3 (SF 2K meeting)
+	 */
+	class DefaultIterator extends Object implements PropInfoList.Iterator
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Default ctor */
+		DefaultIterator() { iterator = list.iterator(); }
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the next PropInfo in the iterator */
+		public PropInfo next() { return (PropInfo)iterator.next(); }
+
+		/** @return true if there is a next PropInfo in the iterator */
+		public boolean hasNext() { return iterator.hasNext(); }
+
+		//---------------------------------------------------------------------
+		// Instance variables
+		//
+
+		private java.util.Iterator iterator = null;
+	}
+
+	//-------------------------------------------------------------------------
+	// Instance variables
+	//
+
+	private List list = new ArrayList();
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultPropValue.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultPropValue.java
new file mode 100644
index 0000000..233025a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultPropValue.java
@@ -0,0 +1,78 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.io.Serializable;
+
+/**
+ * Class implementing the PropValue interface
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+class DefaultPropValue extends Object implements PropValue, Serializable
+{
+	//-------------------------------------------------------------------------
+	// Ctor(s)
+	//
+
+	/**
+	 * 2-arg ctor taking Object value
+	 * @param obj the Object value
+	 * @param propType the PropType
+	 */
+	DefaultPropValue( Object obj, PropType propType ) 
+	{ 
+		value = obj; 
+		type = propType;
+	}
+
+	//-------------------------------------------------------------------------
+	// Public methods
+	//
+
+	/** @return the Java object that this value represents */
+	public Object getValue() { return value; }
+
+	/** @return a String representation of this value */
+	public String toString() { return value.toString(); }
+
+	/** @return the PropType for this PropValue */
+	public PropType getType() { return type; }
+
+	/**
+	 * @return true if this and the other value are equal 
+	 * @param other the other PropValue
+	 */
+	public boolean equals( Object propValue )
+	{
+		if( propValue == null ) return false;
+
+		if( !( propValue instanceof PropValue ) ) return false;
+
+		return value.equals( ( (PropValue)propValue ).getValue() );
+	}
+
+	//-------------------------------------------------------------------------
+	// Instance variables
+	//
+
+	private Object value = null;
+
+	private PropType type = null;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultPropValueList.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultPropValueList.java
new file mode 100644
index 0000000..aa6f129
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/DefaultPropValueList.java
@@ -0,0 +1,111 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.util.*;
+
+/**
+ * Default implementation of the PropValueList interface
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+class DefaultPropValueList extends Object implements PropValueList
+{
+	//-------------------------------------------------------------------------
+	// Ctor(s)
+	//
+
+	/** Default ctor */
+	DefaultPropValueList() {}
+
+	//-------------------------------------------------------------------------
+	// Public methods
+	//
+
+	/** @return the current size of this list */
+	public int getSize() { return list.size(); }
+
+	/** @return true if this list is empty */
+	public boolean isEmpty() { return list.isEmpty(); }
+
+	/**
+	 * Adds a new PropValue to this list
+	 * @param propValue the propValue to add
+	 */
+	public void add( PropValue propValue ) { list.add( propValue ); }
+
+	/**
+	 * Removes the PropValue to this list
+	 * @param propValue the propValue to remove
+	 */
+	public void remove( PropValue propValue ) { list.remove( propValue ); }
+
+	/** Removes all PropValue in this list */
+	public void removeAll() { list.clear(); }
+
+	/**
+	 * @return true if the PropValue is already in the list
+	 * @param propValue the PropValue
+	 */
+	public boolean contains( PropValue propValue ) { return list.contains( propValue ); }
+
+	/** @return an PropValueList.Iterator object for this list */
+	public PropValueList.Iterator iterator() { return this.new DefaultIterator(); }
+
+	//-------------------------------------------------------------------------
+	// Inner interfaces
+	//
+
+	/**
+	 * Simple interface to iterate through the list
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 * @since 1.3 (SF 2K meeting)
+	 */
+	class DefaultIterator extends Object implements PropValueList.Iterator
+	{ 
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Default ctor */
+		DefaultIterator() { iterator = list.iterator(); }
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the next PropValue in the iterator */
+		public PropValue next() { return (PropValue)iterator.next(); }
+
+		/** @return true if there is a next PropValue in the iterator */
+		public boolean hasNext() { return iterator.hasNext(); }
+
+		//---------------------------------------------------------------------
+		// Instance variables
+		//
+
+		private java.util.Iterator iterator = null;
+	}
+
+	//-------------------------------------------------------------------------
+	// Instance variables
+	//
+
+	private List list = new ArrayList();
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/DevCat.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/DevCat.java
new file mode 100644
index 0000000..25b4677
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/DevCat.java
@@ -0,0 +1,177 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Defines an interface for JavaPOS device categories
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface DevCat
+{
+	//-------------------------------------------------------------------------
+	// Constants
+	//
+
+	/** Indicates the version of JavaPOS that these DevCat apply to */
+	public static final String JPOS_VERSION_STRING = "1.5";
+
+	//-------------------------------------------------------------------------
+	// Public methods
+	//
+
+	/** @return the String representation of this DevCat */
+	public String toString();
+
+	/**
+	 * Accepts a DevCat Visitor object
+	 * @param visitor the DevCat Visitor object
+	 */
+	public void accept( DevCatVisitor visitor );
+
+	//-------------------------------------------------------------------------
+	// Inner interfaces
+	//
+
+	/**
+	 * Defines the DevCat for BumpBar
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public interface BumpBar extends DevCat {}
+
+	/**
+	 * Defines the DevCat for POSPrinter
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public interface CashDrawer extends DevCat {}
+
+	/**
+	 * Defines the DevCat for CAT
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public interface CAT extends DevCat {}
+
+	/**
+	 * Defines the DevCat for CoinDispenser
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public interface CoinDispenser extends DevCat {}
+
+	/**
+	 * Defines the DevCat for FiscalPrinter
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public interface FiscalPrinter extends DevCat {}
+
+	/**
+	 * Defines the DevCat for HardTotals
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public interface HardTotals extends DevCat {}
+
+	/**
+	 * Defines the DevCat for Keylock
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public interface Keylock extends DevCat {}
+
+	/**
+	 * Defines the DevCat for POSPrinter
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public interface LineDisplay extends DevCat {}
+
+	/**
+	 * Defines the DevCat for MICR
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien  (maxim@us.ibm.com)
+	 */
+	public interface MICR extends DevCat {}
+
+	/**
+	 * Defines the DevCat for MSR
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public interface MSR extends DevCat {}
+
+	/**
+	 * Defines the DevCat for Pinpad
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public interface Pinpad extends DevCat {}
+
+	/**
+	 * Defines the DevCat for POSKeyboard
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public interface POSKeyboard extends DevCat {}
+
+	/**
+	 * Defines the DevCat for POSPower
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public interface POSPower extends DevCat {}
+
+	/**
+	 * Defines the DevCat for POSPrinter
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public interface POSPrinter extends DevCat {}
+
+	/**
+	 * Defines the DevCat for RemoteOrderDisplay
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public interface RemoteOrderDisplay extends DevCat {}
+
+	/**
+	 * Defines the DevCat for Scanner
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public interface Scanner extends DevCat {}
+
+	/**
+	 * Defines the DevCat for SignatureCapture
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public interface SignatureCapture extends DevCat {}
+
+	/**
+	 * Defines the DevCat for ToneIndicator
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public interface ToneIndicator extends DevCat {}
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/DevCatInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/DevCatInfo.java
new file mode 100644
index 0000000..f2b5a2f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/DevCatInfo.java
@@ -0,0 +1,49 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Defines an interface that aggregates information for a JavaPOS device category
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface DevCatInfo
+{
+	//-------------------------------------------------------------------------
+	// Public methods
+	//
+
+	/** @return the Profile associated with this DevCatInfo */
+	public Profile getProfile();
+
+	/** @return the DevCat */
+	public DevCat getDevCat();
+
+	/** @return the list of standard properties for this DevCat */
+	public PropInfoList getStandardProps();
+
+	/** @return the list of required properties for this DevCat */
+	public PropInfoList getRequiredProps();
+
+	/** @return the list of optional properties for this DevCat */
+	public PropInfoList getOptionalProps();
+
+	/** @return the String representation of this DevCat */
+	public String toString();
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/DevCatInfoList.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/DevCatInfoList.java
new file mode 100644
index 0000000..28d4c5a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/DevCatInfoList.java
@@ -0,0 +1,75 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Defines a simple list of DevCatInfo objects
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface DevCatInfoList
+{
+	/** @return the current size of this list */
+	public int getSize();
+
+	/** @return true if this list is empty */
+	public boolean isEmpty();
+
+	/**
+	 * Adds a new DevCatInfo to this list
+	 * @param devCatInfo the devCatInfo to add
+	 */
+	public void add( DevCatInfo devCatInfo );
+
+	/**
+	 * Removes the DevCatInfo to this list
+	 * @param devCatInfo the devCatInfo to remove
+	 */
+	public void remove( DevCatInfo devCatInfo );
+
+	/** Removes all DevCatInfo in this list */
+	public void removeAll();
+
+	/**
+	 * @return true if the DevCatInfo is already in the list
+	 * @param devCatInfo the devCatInfo
+	 */
+	public boolean contains( DevCatInfo devCatInfo );
+
+	/** @return an DevCatInfoList.Iterator object for this list */
+	public DevCatInfoList.Iterator iterator();
+
+	//-------------------------------------------------------------------------
+	// Inner interfaces
+	//
+
+	/**
+	 * Simple interface to iterate through the list
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 * @since 1.3 (SF 2K meeting)
+	 */
+	public interface Iterator
+	{
+		/** @return the next DevCatInfo in the iterator */
+		public DevCatInfo next();
+
+		/** @return true if there is a next DevCatInfo in the iterator */
+		public boolean hasNext();
+	}
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/DevCatVisitor.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/DevCatVisitor.java
new file mode 100644
index 0000000..e6df679
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/DevCatVisitor.java
@@ -0,0 +1,169 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Defines a Visitor interface for the DevCat hiearchy
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface DevCatVisitor
+{
+	//-------------------------------------------------------------------------
+	// Public methods
+	//
+
+	/**
+	 * Visits a  DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitBumpBar( DevCat devCat );
+
+	/**
+	 * Visits a CashChanger DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitCashChanger( DevCat devCat );
+
+	/**
+	 * Visits a CashDrawer DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitCashDrawer( DevCat devCat );
+
+	/**
+	 * Visits a CheckScanner DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitCheckScanner( DevCat devCat );
+
+	/**
+	 * Visits a CAT DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitCAT( DevCat devCat );
+
+	/**
+	 * Visits a CoinDispenser DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitCoinDispenser( DevCat devCat );
+
+	/**
+	 * Visits a FiscalPrinter DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitFiscalPrinter( DevCat devCat );
+
+	/**
+	 * Visits a HardTotals DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitHardTotals( DevCat devCat );
+
+	/**
+	 * Visits a Keylock DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitKeylock( DevCat devCat );
+
+	/**
+	 * Visits a LineDisplay DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitLineDisplay( DevCat devCat );
+
+	/**
+	 * Visits a MICR DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitMICR( DevCat devCat );
+
+	/**
+	 * Visits a MotionSensor DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitMotionSensor( DevCat devCat );
+
+	/**
+	 * Visits a MSR DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitMSR( DevCat devCat );
+
+	/**
+	 * Visits a Pinpad DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitPinpad( DevCat devCat );
+
+	/**
+	 * Visits a POSKeyboard DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitPOSKeyboard( DevCat devCat );
+
+	/**
+	 * Visits a POSPower DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitPOSPower( DevCat devCat );
+
+	/**
+	 * Visits a POSPrinter DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitPOSPrinter( DevCat devCat );
+
+	/**
+	 * Visits a RemoteOrderDisplay DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitRemoteOrderDisplay( DevCat devCat );
+
+	/**
+	 * Visits a Scanner DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitScanner( DevCat devCat );
+
+	/**
+	 * Visits a SignatureCapture DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitSignatureCapture( DevCat devCat );
+
+	/**
+	 * Visits a Scale DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitScale( DevCat devCat );
+
+	/**
+	 * Visits a ToneIndicator DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitToneIndicator( DevCat devCat );
+
+	/**
+	 * Visits a PointCardReaderWriter DevCat
+	 * @param devCat the DevCat
+	 */
+	public void visitPointCardRW( DevCat devCat );	
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/FloatPropType.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/FloatPropType.java
new file mode 100644
index 0000000..2536bca
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/FloatPropType.java
@@ -0,0 +1,83 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.io.Serializable;
+
+/**
+ * Defines a Float property type
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public class FloatPropType extends AbstractPropType implements PropType, Serializable
+{
+	//-------------------------------------------------------------------------
+	// Ctor(s)
+	//
+
+	/** Default ctor */
+	FloatPropType() {}
+
+	//---------------------------------------------------------------------
+	// Class methods
+	//
+
+	/** @return the unique instance of this class (create if necessary) */
+	public static PropType getInstance()
+	{
+		if( instance == null )
+			instance = new FloatPropType();
+
+		return instance;
+	}
+
+	//-------------------------------------------------------------------------
+	// Public methods
+	//
+
+	/** @return a String representation of this PropType */
+	public String toString() { return "FloatPropType"; }
+
+	/** @return a Java class that defines this type */
+	public Class getJavaTypeClass() { return ( new Float( 1.0 ) ).getClass(); }
+
+	/**
+	 * @return true if the object passed is of this PropType
+	 * @param f the float primitive type
+	 */
+	public boolean isValidValue( float f ) { return true; }
+
+	/**
+	 * @return true if the object passed is of this PropType
+	 * @param obj the Java Object
+	 */
+	public boolean isValidValue( Object obj ) { return ( obj instanceof Float ); }
+
+	/**
+	 * @return true if the PropValue passed is of this PropType
+	 * @param propValue the PropValue
+	 */
+	public boolean isValidValue( PropValue propValue ) { return isValidValue( propValue.getValue() ); }
+
+	//-------------------------------------------------------------------------
+	// Class instance
+	//
+
+	private static PropType instance = null;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/IntegerPropType.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/IntegerPropType.java
new file mode 100644
index 0000000..600e48e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/IntegerPropType.java
@@ -0,0 +1,83 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.io.Serializable;
+
+/**
+ * Defines a Integer property type
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public class IntegerPropType extends AbstractPropType implements PropType, Serializable
+{
+	//-------------------------------------------------------------------------
+	// Ctor(s)
+	//
+
+	/** Default ctor */
+	IntegerPropType() {}
+
+	//---------------------------------------------------------------------
+	// Class methods
+	//
+
+	/** @return the unique instance of this class (create if necessary) */
+	public static PropType getInstance()
+	{
+		if( instance == null )
+			instance = new IntegerPropType();
+
+		return instance;
+	}
+
+	//-------------------------------------------------------------------------
+	// Public methods
+	//
+
+	/** @return a String representation of this PropType */
+	public String toString() { return "IntegerPropType"; }
+
+	/** @return a Java class that defines this type */
+	public Class getJavaTypeClass() { return ( new Integer( 0 ) ).getClass(); }
+
+	/**
+	 * @return true if the object passed is of this PropType
+	 * @param i the int primitive type
+	 */
+	public boolean isValidValue( int i ) { return true; }
+
+	/**
+	 * @return true if the object passed is of this PropType
+	 * @param obj the Java Object
+	 */
+	public boolean isValidValue( Object obj ) { return ( obj instanceof Integer ); }
+
+	/**
+	 * @return true if the PropValue passed is of this PropType
+	 * @param propValue the PropValue
+	 */
+	public boolean isValidValue( PropValue propValue ) { return isValidValue( propValue.getValue() ); }
+
+	//-------------------------------------------------------------------------
+	// Class instance
+	//
+
+	private static PropType instance = null;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/JposDevCats.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/JposDevCats.java
new file mode 100644
index 0000000..c279ffc
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/JposDevCats.java
@@ -0,0 +1,1378 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.util.*;
+
+/**
+ * Defines an interface for JavaPOS device categories
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public class JposDevCats extends Object
+{
+	//-------------------------------------------------------------------------
+	// Private class constants
+	//
+
+	private static final Hashtable DEVCAT_TABLE = new Hashtable();
+
+	//-------------------------------------------------------------------------
+	// Class constants
+	//
+
+	public static final DevCat UNKNOWN_DEVCAT = 
+								 JposDevCats.Unknown.getInstance();
+	
+	public static final DevCat BUMPBAR_DEVCAT = 
+								 JposDevCats.BumpBar.getInstance();
+
+	public static final DevCat CASHCHANGER_DEVCAT = 
+								 JposDevCats.CashChanger.getInstance();
+	
+	public static final DevCat CASHDRAWER_DEVCAT = 
+								 JposDevCats.CashDrawer.getInstance();
+	
+	public static final DevCat CHECKSCANNER_DEVCAT = 
+								 JposDevCats.CheckScanner.getInstance();
+
+	public static final DevCat CAT_DEVCAT = 
+								 JposDevCats.CAT.getInstance();
+	
+	public static final DevCat COINDISPENSER_DEVCAT = 
+								 JposDevCats.CoinDispenser.getInstance();
+	
+	public static final DevCat FISCALPRINTER_DEVCAT = 
+								 JposDevCats.FiscalPrinter.getInstance();
+	
+	public static final DevCat HARDTOTALS_DEVCAT = 
+								 JposDevCats.HardTotals.getInstance();
+	
+	public static final DevCat KEYLOCK_DEVCAT = 
+								 JposDevCats.Keylock.getInstance();
+	
+	public static final DevCat LINEDISPLAY_DEVCAT = 
+								 JposDevCats.LineDisplay.getInstance();
+	
+	public static final DevCat MICR_DEVCAT = 
+								 JposDevCats.MICR.getInstance();
+	
+	public static final DevCat MOTIONSENSOR_DEVCAT = 
+								 JposDevCats.MotionSensor.getInstance();	
+	
+	public static final DevCat MSR_DEVCAT = 
+								 JposDevCats.MSR.getInstance();
+	
+	public static final DevCat PINPAD_DEVCAT = 
+								 JposDevCats.Pinpad.getInstance();
+
+	public static final DevCat POINTCARDRW_DEVCAT = 
+								 JposDevCats.PointCardRW.getInstance();
+	
+	public static final DevCat POSKEYBOARD_DEVCAT = 
+								 JposDevCats.POSKeyboard.getInstance();
+	
+	public static final DevCat POSPOWER_DEVCAT = 
+								 JposDevCats.POSPower.getInstance();
+	
+	public static final DevCat POSPRINTER_DEVCAT = 
+								 JposDevCats.POSPrinter.getInstance();
+	
+	public static final DevCat REMOTEORDERDISPLAY_DEVCAT = 
+								 JposDevCats.RemoteOrderDisplay.getInstance();
+	
+	public static final DevCat SCANNER_DEVCAT = 
+								 JposDevCats.Scanner.getInstance();
+	
+	public static final DevCat SCALE_DEVCAT = 
+								 JposDevCats.Scale.getInstance();	
+	
+	public static final DevCat SIGNATURECAPTURE_DEVCAT = 
+								 JposDevCats.SignatureCapture.getInstance();
+	
+	public static final DevCat TONEINDICATOR_DEVCAT = 
+								 JposDevCats.ToneIndicator.getInstance();
+
+
+	//-------------------------------------------------------------------------
+	// Class constants
+	//
+
+	/** An array of all of the JavaPOS DevCat */
+	public static final DevCat[] DEVCAT_ARRAY = 
+								   { BUMPBAR_DEVCAT, CASHCHANGER_DEVCAT,
+								   	 CASHDRAWER_DEVCAT, CHECKSCANNER_DEVCAT,
+								   	 CAT_DEVCAT, COINDISPENSER_DEVCAT, 
+								   	 FISCALPRINTER_DEVCAT, HARDTOTALS_DEVCAT,
+									 KEYLOCK_DEVCAT, LINEDISPLAY_DEVCAT, 
+									 MICR_DEVCAT, MOTIONSENSOR_DEVCAT,
+									 MSR_DEVCAT, PINPAD_DEVCAT, 
+									 POSKEYBOARD_DEVCAT, POSPOWER_DEVCAT, 
+									 POSPRINTER_DEVCAT, 
+									 REMOTEORDERDISPLAY_DEVCAT, SCANNER_DEVCAT,
+									 SCALE_DEVCAT, SIGNATURECAPTURE_DEVCAT, 
+									 TONEINDICATOR_DEVCAT,
+									 POINTCARDRW_DEVCAT };
+
+	//-------------------------------------------------------------------------
+	// Static initializer
+	//
+	
+	static
+	{
+		DEVCAT_TABLE.put( BUMPBAR_DEVCAT.toString(), BUMPBAR_DEVCAT );
+		DEVCAT_TABLE.put( CASHCHANGER_DEVCAT.toString(), CASHCHANGER_DEVCAT );		
+		DEVCAT_TABLE.put( CASHDRAWER_DEVCAT.toString(), CASHDRAWER_DEVCAT );
+		DEVCAT_TABLE.put( CHECKSCANNER_DEVCAT.toString(), CHECKSCANNER_DEVCAT );
+		DEVCAT_TABLE.put( CAT_DEVCAT.toString(), CAT_DEVCAT );
+		DEVCAT_TABLE.put( COINDISPENSER_DEVCAT.toString(), 
+						  COINDISPENSER_DEVCAT );
+		DEVCAT_TABLE.put( FISCALPRINTER_DEVCAT.toString(), 
+						  FISCALPRINTER_DEVCAT );
+		DEVCAT_TABLE.put( HARDTOTALS_DEVCAT.toString(), HARDTOTALS_DEVCAT );
+		DEVCAT_TABLE.put( KEYLOCK_DEVCAT.toString(), KEYLOCK_DEVCAT );
+		DEVCAT_TABLE.put( LINEDISPLAY_DEVCAT.toString(), LINEDISPLAY_DEVCAT );
+		DEVCAT_TABLE.put( MICR_DEVCAT.toString(), MICR_DEVCAT );
+		DEVCAT_TABLE.put( MOTIONSENSOR_DEVCAT.toString(), MOTIONSENSOR_DEVCAT );		
+		DEVCAT_TABLE.put( MSR_DEVCAT.toString(), MSR_DEVCAT );           
+		DEVCAT_TABLE.put( PINPAD_DEVCAT.toString(), PINPAD_DEVCAT );
+		DEVCAT_TABLE.put( POINTCARDRW_DEVCAT.toString(), 
+						  POINTCARDRW_DEVCAT );		
+		DEVCAT_TABLE.put( POSKEYBOARD_DEVCAT.toString(), POSKEYBOARD_DEVCAT );
+		DEVCAT_TABLE.put( POSPOWER_DEVCAT.toString(), POSPOWER_DEVCAT );
+		DEVCAT_TABLE.put( POSPRINTER_DEVCAT.toString(), POSPRINTER_DEVCAT );
+		DEVCAT_TABLE.put( REMOTEORDERDISPLAY_DEVCAT.toString(), 
+						  REMOTEORDERDISPLAY_DEVCAT );
+		DEVCAT_TABLE.put( SCANNER_DEVCAT.toString(), SCANNER_DEVCAT );
+		DEVCAT_TABLE.put( SCALE_DEVCAT.toString(), SCALE_DEVCAT );		
+		DEVCAT_TABLE.put( SIGNATURECAPTURE_DEVCAT.toString(), 
+						  SIGNATURECAPTURE_DEVCAT );
+		DEVCAT_TABLE.put( TONEINDICATOR_DEVCAT.toString(), 
+						  TONEINDICATOR_DEVCAT );
+	}
+
+	//-------------------------------------------------------------------------
+	// Class methods
+	//
+
+	/**
+	 * @return the DevCat for the String name passed
+	 * @param devCatString the String name for this DevCat
+	 */
+	public static DevCat getDevCatForName( String devCatName )
+	{
+		if( DEVCAT_TABLE.containsKey( devCatName ) )
+			return (DevCat)DEVCAT_TABLE.get( devCatName );
+
+		return UNKNOWN_DEVCAT;
+	}
+
+	//-------------------------------------------------------------------------
+	// Inner classes
+	//
+
+	/**
+	 * Defines the super class for all DevCat
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public static abstract class AbstractDevCat extends Object 
+	implements DevCat 
+	{
+	    //---------------------------------------------------------------------
+	    // Public overriden methods
+	    //
+
+	    /** @return the String representation of this DevCat */
+	    public abstract String toString();
+
+		/** 
+		 * @return true if these two DevCat are the same JavaPOS device 
+		 * category 
+		 * @param obj the other object to compare to
+		 */
+		public boolean equals( Object obj )
+		{
+			if( obj == null ) return false;
+
+			if( !( obj instanceof DevCat ) ) return false;
+
+			return toString().equals( obj.toString() );
+		}
+	}
+
+	/**
+	 * Defines an Unknown DevCat
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public static class Unknown extends AbstractDevCat implements DevCat 
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Make ctor package to avoid ctor */
+		Unknown() {}
+
+		//---------------------------------------------------------------------
+		// Class methods
+		//
+
+		/** @return the unique instance of this class (create if necessary) */
+		public static DevCat getInstance()
+		{
+			if( instance == null )
+				instance = new JposDevCats.Unknown();
+
+			return instance;
+		}
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the String representation of this DevCat */
+		public String toString() { return "Unknown"; }
+
+		/**
+		 * Accepts a DevCat Visitor object
+		 * @param visitor the DevCat Visitor object
+		 */
+		public void accept( DevCatVisitor visitor ) {}
+
+		//---------------------------------------------------------------------
+		// Class instance
+		//
+
+		private static DevCat instance = null;
+	}
+	
+	/**
+	 * Defines the DevCat for BumpBar
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien
+	 */
+	public static class BumpBar extends AbstractDevCat implements DevCat 
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Make ctor package to avoid ctor */
+		BumpBar() {}
+
+		//---------------------------------------------------------------------
+		// Class methods
+		//
+
+		/** @return the unique instance of this class (create if necessary) */
+		public static DevCat getInstance()
+		{
+			if( instance == null )
+				instance = new JposDevCats.BumpBar();
+
+			return instance;
+		}
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the String representation of this DevCat */
+		public String toString() { return "BumpBar"; }
+
+		/**
+		 * Accepts a DevCat Visitor object
+		 * @param visitor the DevCat Visitor object
+		 */
+		public void accept( DevCatVisitor visitor ) 
+		{ visitor.visitBumpBar( this ); }
+
+		//---------------------------------------------------------------------
+		// Class instance
+		//
+
+		private static DevCat instance = null;
+	}
+
+	/**
+	 * Defines the DevCat for CashChanger
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public static class CashChanger extends AbstractDevCat implements DevCat 
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Make ctor package to avoid ctor */
+		CashChanger() {}
+
+		//---------------------------------------------------------------------
+		// Class methods
+		//
+
+		/** @return the unique instance of this class (create if necessary) */
+		public static DevCat getInstance()
+		{
+			if( instance == null )
+				instance = new JposDevCats.CashChanger();
+
+			return instance;
+		}
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the String representation of this DevCat */
+		public String toString() { return "CashChanger"; }
+
+		/**
+		 * Accepts a DevCat Visitor object
+		 * @param visitor the DevCat Visitor object
+		 */
+		public void accept( DevCatVisitor visitor ) 
+		{ visitor.visitCashChanger( this ); }
+
+		//---------------------------------------------------------------------
+		// Class instance
+		//
+
+		private static DevCat instance = null;
+	}
+
+	/**
+	 * Defines the DevCat for CashDrawer
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public static class CashDrawer extends AbstractDevCat implements DevCat 
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Make ctor package to avoid ctor */
+		CashDrawer() {}
+
+		//---------------------------------------------------------------------
+		// Class methods
+		//
+
+		/** @return the unique instance of this class (create if necessary) */
+		public static DevCat getInstance()
+		{
+			if( instance == null )
+				instance = new JposDevCats.CashDrawer();
+
+			return instance;
+		}
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the String representation of this DevCat */
+		public String toString() { return "CashDrawer"; }
+
+		/**
+		 * Accepts a DevCat Visitor object
+		 * @param visitor the DevCat Visitor object
+		 */
+		public void accept( DevCatVisitor visitor ) 
+		{ visitor.visitCashDrawer( this ); }
+
+		//---------------------------------------------------------------------
+		// Class instance
+		//
+
+		private static DevCat instance = null;
+	}
+
+	/**
+	 * Defines the DevCat for CheckScanner
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public static class CheckScanner extends AbstractDevCat 
+									   implements DevCat 
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Make ctor package to avoid ctor */
+		CheckScanner() {}
+
+		//---------------------------------------------------------------------
+		// Class methods
+		//
+
+		/** @return the unique instance of this class (create if necessary) */
+		public static DevCat getInstance()
+		{
+			if( instance == null )
+				instance = new JposDevCats.CheckScanner();
+
+			return instance;
+		}
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the String representation of this DevCat */
+		public String toString() { return "CheckScanner"; }
+
+		/**
+		 * Accepts a DevCat Visitor object
+		 * @param visitor the DevCat Visitor object
+		 */
+		public void accept( DevCatVisitor visitor ) 
+		{ visitor.visitCheckScanner( this ); }
+
+		//---------------------------------------------------------------------
+		// Class instance
+		//
+
+		private static DevCat instance = null;
+	}
+
+	/**
+	 * Defines the DevCat for CAT
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public static class CAT extends AbstractDevCat implements DevCat 
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Make ctor package to avoid ctor */
+		CAT() {}
+
+		//---------------------------------------------------------------------
+		// Class methods
+		//
+
+		/** @return the unique instance of this class (create if necessary) */
+		public static DevCat getInstance()
+		{
+			if( instance == null )
+				instance = new JposDevCats.CAT();
+
+			return instance;
+		}
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the String representation of this DevCat */
+		public String toString() { return "CAT"; }
+
+		/**
+		 * Accepts a DevCat Visitor object
+		 * @param visitor the DevCat Visitor object
+		 */
+		public void accept( DevCatVisitor visitor ) 
+		{ visitor.visitCAT( this ); }
+
+		//---------------------------------------------------------------------
+		// Class instance
+		//
+
+		private static DevCat instance = null;
+	}
+
+	/**
+	 * Defines the DevCat for CoinDispenser
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public static class CoinDispenser extends AbstractDevCat 
+										implements DevCat 
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Make ctor package to avoid ctor */
+		CoinDispenser() {}
+
+		//---------------------------------------------------------------------
+		// Class methods
+		//
+
+		/** @return the unique instance of this class (create if necessary) */
+		public static DevCat getInstance()
+		{
+			if( instance == null )
+				instance = new JposDevCats.CoinDispenser();
+
+			return instance;
+		}
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the String representation of this DevCat */
+		public String toString() { return "CoinDispenser"; }
+
+		/**
+		 * Accepts a DevCat Visitor object
+		 * @param visitor the DevCat Visitor object
+		 */
+		public void accept( DevCatVisitor visitor ) 
+		{ visitor.visitCoinDispenser( this ); }
+
+		//---------------------------------------------------------------------
+		// Class instance
+		//
+
+		private static DevCat instance = null;
+	}
+
+	/**
+	 * Defines the DevCat for FiscalPrinter
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public static class FiscalPrinter extends AbstractDevCat 
+										implements DevCat 
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Make ctor package to avoid ctor */
+		FiscalPrinter() {}
+
+		//---------------------------------------------------------------------
+		// Class methods
+		//
+
+		/** @return the unique instance of this class (create if necessary) */
+		public static DevCat getInstance()
+		{
+			if( instance == null )
+				instance = new JposDevCats.FiscalPrinter();
+
+			return instance;
+		}
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the String representation of this DevCat */
+		public String toString() { return "FiscalPrinter"; }
+
+		/**
+		 * Accepts a DevCat Visitor object
+		 * @param visitor the DevCat Visitor object
+		 */
+		public void accept( DevCatVisitor visitor ) 
+		{ visitor.visitFiscalPrinter( this ); }
+
+		//---------------------------------------------------------------------
+		// Class instance
+		//
+
+		private static DevCat instance = null;
+	}
+
+	/**
+	 * Defines the DevCat for HardTotals
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public static class HardTotals extends AbstractDevCat implements DevCat 
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Make ctor package to avoid ctor */
+		HardTotals() {}
+
+		//---------------------------------------------------------------------
+		// Class methods
+		//
+
+		/** @return the unique instance of this class (create if necessary) */
+		public static DevCat getInstance()
+		{
+			if( instance == null )
+				instance = new JposDevCats.HardTotals();
+
+			return instance;
+		}
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the String representation of this DevCat */
+		public String toString() { return "HardTotals"; }
+
+		/**
+		 * Accepts a DevCat Visitor object
+		 * @param visitor the DevCat Visitor object
+		 */
+		public void accept( DevCatVisitor visitor ) 
+		{ visitor.visitHardTotals( this ); }
+
+		//---------------------------------------------------------------------
+		// Class instance
+		//
+
+		private static DevCat instance = null;
+	}
+
+	/**
+	 * Defines the DevCat for Keylock
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public static class Keylock extends AbstractDevCat implements DevCat 
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Make ctor package to avoid ctor */
+		Keylock() {}
+
+		//---------------------------------------------------------------------
+		// Class methods
+		//
+
+		/** @return the unique instance of this class (create if necessary) */
+		public static DevCat getInstance()
+		{
+			if( instance == null )
+				instance = new JposDevCats.Keylock();
+
+			return instance;
+		}
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the String representation of this DevCat */
+		public String toString() { return "Keylock"; }
+
+		/**
+		 * Accepts a DevCat Visitor object
+		 * @param visitor the DevCat Visitor object
+		 */
+		public void accept( DevCatVisitor visitor ) 
+		{ visitor.visitKeylock( this ); }
+
+		//---------------------------------------------------------------------
+		// Class instance
+		//
+
+		private static DevCat instance = null;
+	}
+
+	/**
+	 * Defines the DevCat for LineDisplay
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public static class LineDisplay extends AbstractDevCat implements DevCat 
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Make ctor package to avoid ctor */
+		LineDisplay() {}
+
+		//---------------------------------------------------------------------
+		// Class methods
+		//
+
+		/** @return the unique instance of this class (create if necessary) */
+		public static DevCat getInstance()
+		{
+			if( instance == null )
+				instance = new JposDevCats.LineDisplay();
+
+			return instance;
+		}
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the String representation of this DevCat */
+		public String toString() { return "LineDisplay"; }
+
+		/**
+		 * Accepts a DevCat Visitor object
+		 * @param visitor the DevCat Visitor object
+		 */
+		public void accept( DevCatVisitor visitor ) 
+		{ visitor.visitLineDisplay( this ); }
+
+		//---------------------------------------------------------------------
+		// Class instance
+		//
+
+		private static DevCat instance = null;
+	}
+
+	/**
+	 * Defines the DevCat for MICR
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public static class MICR extends AbstractDevCat implements DevCat 
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Make ctor package to avoid ctor */
+		MICR() {}
+
+		//---------------------------------------------------------------------
+		// Class methods
+		//
+
+		/** @return the unique instance of this class (create if necessary) */
+		public static DevCat getInstance()
+		{
+			if( instance == null )
+				instance = new JposDevCats.MICR();
+
+			return instance;
+		}
+		
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the String representation of this DevCat */
+		public String toString() { return "MICR"; }
+
+		/**
+		 * Accepts a DevCat Visitor object
+		 * @param visitor the DevCat Visitor object
+		 */
+		public void accept( DevCatVisitor visitor ) 
+		{ visitor.visitMICR( this ); }
+
+		//---------------------------------------------------------------------
+		// Class instance
+		//
+
+		private static DevCat instance = null;
+	}
+
+	/**
+	 * Defines the DevCat for MotionSensor
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public static class MotionSensor extends AbstractDevCat 
+									   implements DevCat 
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Make ctor package to avoid ctor */
+		MotionSensor() {}
+
+		//---------------------------------------------------------------------
+		// Class methods
+		//
+
+		/** @return the unique instance of this class (create if necessary) */
+		public static DevCat getInstance()
+		{
+			if( instance == null )
+				instance = new JposDevCats.MotionSensor();
+
+			return instance;
+		}
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the String representation of this DevCat */
+		public String toString() { return "MotionSensor"; }
+
+		/**
+		 * Accepts a DevCat Visitor object
+		 * @param visitor the DevCat Visitor object
+		 */
+		public void accept( DevCatVisitor visitor ) 
+		{ visitor.visitMotionSensor( this ); }
+
+		//---------------------------------------------------------------------
+		// Class instance
+		//
+
+		private static DevCat instance = null;
+	}
+
+	/**
+	 * Defines the DevCat for MSR
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public static class MSR extends AbstractDevCat implements DevCat 
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Make ctor package to avoid ctor */
+		MSR() {}
+
+		//---------------------------------------------------------------------
+		// Class methods
+		//
+
+		/** @return the unique instance of this class (create if necessary) */
+		public static DevCat getInstance()
+		{
+			if( instance == null )
+				instance = new JposDevCats.MSR();
+
+			return instance;
+		}
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the String representation of this DevCat */
+		public String toString() { return "MSR"; }
+
+		/**
+		 * Accepts a DevCat Visitor object
+		 * @param visitor the DevCat Visitor object
+		 */
+		public void accept( DevCatVisitor visitor ) 
+		{ visitor.visitMSR( this ); }
+
+		//---------------------------------------------------------------------
+		// Class instance
+		//
+
+		private static DevCat instance = null;
+	}
+
+	/**
+	 * Defines the DevCat for Pinpad
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public static class Pinpad extends AbstractDevCat implements DevCat 
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Make ctor package to avoid ctor */
+		Pinpad() {}
+
+		//---------------------------------------------------------------------
+		// Class methods
+		//
+
+		/** @return the unique instance of this class (create if necessary) */
+		public static DevCat getInstance()
+		{
+			if( instance == null )
+				instance = new JposDevCats.Pinpad();
+
+			return instance;
+		}
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the String representation of this DevCat */
+		public String toString() { return "Pinpad"; }
+
+		/**
+		 * Accepts a DevCat Visitor object
+		 * @param visitor the DevCat Visitor object
+		 */
+		public void accept( DevCatVisitor visitor ) 
+		{ visitor.visitPinpad( this ); }
+
+		//---------------------------------------------------------------------
+		// Class instance
+		//
+
+		private static DevCat instance = null;
+	}
+
+	/**
+	 * Defines the DevCat for POSKeyboard
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public static class POSKeyboard extends AbstractDevCat implements DevCat 
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Make ctor package to avoid ctor */
+		POSKeyboard() {}
+
+		//---------------------------------------------------------------------
+		// Class methods
+		//
+
+		/** @return the unique instance of this class (create if necessary) */
+		public static DevCat getInstance()
+		{
+			if( instance == null )
+				instance = new JposDevCats.POSKeyboard();
+
+			return instance;
+		}
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the String representation of this DevCat */
+		public String toString() { return "POSKeyboard"; }
+
+		/**
+		 * Accepts a DevCat Visitor object
+		 * @param visitor the DevCat Visitor object
+		 */
+		public void accept( DevCatVisitor visitor ) 
+		{ visitor.visitPOSKeyboard( this ); }
+
+		//---------------------------------------------------------------------
+		// Class instance
+		//
+
+		private static DevCat instance = null;
+	}
+
+	/**
+	 * Defines the DevCat for POSPower
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public static class POSPower extends AbstractDevCat implements DevCat 
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Make ctor package to avoid ctor */
+		POSPower() {}
+
+		//---------------------------------------------------------------------
+		// Class methods
+		//
+
+		/** @return the unique instance of this class (create if necessary) */
+		public static DevCat getInstance()
+		{
+			if( instance == null )
+				instance = new JposDevCats.POSPower();
+
+			return instance;
+		}
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the String representation of this DevCat */
+		public String toString() { return "POSPower"; }
+
+		/**
+		 * Accepts a DevCat Visitor object
+		 * @param visitor the DevCat Visitor object
+		 */
+		public void accept( DevCatVisitor visitor ) 
+		{ visitor.visitPOSPower( this ); }
+
+		//---------------------------------------------------------------------
+		// Class instance
+		//
+
+		private static DevCat instance = null;
+	}
+
+	/**
+	 * Defines the DevCat for POSPrinter
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public static class POSPrinter extends AbstractDevCat implements DevCat 
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Make ctor package to avoid ctor */
+		POSPrinter() {}
+
+		//---------------------------------------------------------------------
+		// Class methods
+		//
+
+		/** @return the unique instance of this class (create if necessary) */
+		public static DevCat getInstance()
+		{
+			if( instance == null )
+				instance = new JposDevCats.POSPrinter();
+
+			return instance;
+		}
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the String representation of this DevCat */
+		public String toString() { return "POSPrinter"; }
+
+		/**
+		 * Accepts a DevCat Visitor object
+		 * @param visitor the DevCat Visitor object
+		 */
+		public void accept( DevCatVisitor visitor ) 
+		{ visitor.visitPOSPrinter( this ); }
+
+		//---------------------------------------------------------------------
+		// Class instance
+		//
+
+		private static DevCat instance = null;
+	}
+
+	/**
+	 * Defines the DevCat for RemoteOrderDisplay
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public static class RemoteOrderDisplay extends AbstractDevCat 
+											 implements DevCat 
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Make ctor package to avoid ctor */
+		RemoteOrderDisplay() {}
+
+		//---------------------------------------------------------------------
+		// Class methods
+		//
+
+		/** @return the unique instance of this class (create if necessary) */
+		public static DevCat getInstance()
+		{
+			if( instance == null )
+				instance = new JposDevCats.RemoteOrderDisplay();
+
+			return instance;
+		}
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the String representation of this DevCat */
+		public String toString() { return "RemoteOrderDisplay"; }
+
+		/**
+		 * Accepts a DevCat Visitor object
+		 * @param visitor the DevCat Visitor object
+		 */
+		public void accept( DevCatVisitor visitor ) 
+		{ visitor.visitRemoteOrderDisplay( this ); }
+
+		//---------------------------------------------------------------------
+		// Class instance
+		//
+
+		private static DevCat instance = null;
+	}
+
+	/**
+	 * Defines the DevCat for Scanner
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public static class Scanner extends AbstractDevCat implements DevCat 
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Make ctor package to avoid ctor */
+		Scanner() {}
+
+		//---------------------------------------------------------------------
+		// Class methods
+		//
+
+		/** @return the unique instance of this class (create if necessary) */
+		public static DevCat getInstance()
+		{
+			if( instance == null )
+				instance = new JposDevCats.Scanner();
+
+			return instance;
+		}
+
+		//---------------------------------------------------------------------
+        // Public methods                                                            
+		//
+
+		/** @return the String representation of this DevCat */
+		public String toString() { return "Scanner"; }
+
+		/**
+		 * Accepts a DevCat Visitor object
+		 * @param visitor the DevCat Visitor object
+		 */
+		public void accept( DevCatVisitor visitor ) 
+		{ visitor.visitScanner( this ); }
+
+		//---------------------------------------------------------------------
+		// Class instance
+		//
+
+		private static DevCat instance = null;
+	}
+
+	/**
+	 * Defines the DevCat for SignatureCapture
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public static class SignatureCapture extends AbstractDevCat 
+										   implements DevCat 
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Make ctor package to avoid ctor */
+		SignatureCapture() {}
+
+		//---------------------------------------------------------------------
+		// Class methods
+		//
+
+		/** @return the unique instance of this class (create if necessary) */
+		public static DevCat getInstance()
+		{
+			if( instance == null )
+				instance = new JposDevCats.SignatureCapture();
+
+			return instance;
+		}
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the String representation of this DevCat */
+		public String toString() { return "SignatureCapture"; }
+
+		/**
+		 * Accepts a DevCat Visitor object
+		 * @param visitor the DevCat Visitor object
+		 */
+		public void accept( DevCatVisitor visitor ) 
+		{ visitor.visitSignatureCapture( this ); }
+
+		//---------------------------------------------------------------------
+		// Class instance
+		//
+
+		private static DevCat instance = null;
+	}
+
+	/**
+	 * Defines the DevCat for Scale
+	 * @since 2.1
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public static class Scale extends AbstractDevCat implements DevCat 
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Make ctor package to avoid ctor */
+		Scale() {}
+
+		//---------------------------------------------------------------------
+		// Class methods
+		//
+
+		/** @return the unique instance of this class (create if necessary) */
+		public static DevCat getInstance()
+		{
+			if( instance == null )
+				instance = new JposDevCats.Scale();
+
+			return instance;
+		}
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the String representation of this DevCat */
+		public String toString() { return "Scale"; }
+
+		/**
+		 * Accepts a DevCat Visitor object
+		 * @param visitor the DevCat Visitor object
+		 */
+		public void accept( DevCatVisitor visitor ) 
+		{ visitor.visitScale( this ); }
+
+		//---------------------------------------------------------------------
+		// Class instance
+		//
+
+		private static DevCat instance = null;
+	}
+
+	/**
+	 * Defines the DevCat for ToneIndicator
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public static class ToneIndicator extends AbstractDevCat 
+										implements DevCat 
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Make ctor package to avoid ctor */
+		ToneIndicator() {}
+
+		//---------------------------------------------------------------------
+		// Class methods
+		//
+
+		/** @return the unique instance of this class (create if necessary) */
+		public static DevCat getInstance()
+		{
+			if( instance == null )
+				instance = new JposDevCats.ToneIndicator();
+
+			return instance;
+		}
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the String representation of this DevCat */
+		public String toString() { return "ToneIndicator"; }
+
+		/**
+		 * Accepts a DevCat Visitor object
+		 * @param visitor the DevCat Visitor object
+		 */
+		public void accept( DevCatVisitor visitor ) 
+		{ visitor.visitToneIndicator( this ); }
+
+		//---------------------------------------------------------------------
+		// Class instance
+		//
+
+		private static DevCat instance = null;
+	}
+	
+	/**
+	 * Defines the DevCat for PointCardRW
+	 * @since 1.3 (SF 2K meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	public static class PointCardRW extends AbstractDevCat 
+	                                            implements DevCat 
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/** Make ctor package to avoid ctor */
+		PointCardRW() {}
+
+		//---------------------------------------------------------------------
+		// Class methods
+		//
+
+		/** @return the unique instance of this class (create if necessary) */
+		public static DevCat getInstance()
+		{
+			if( instance == null )
+				instance = new JposDevCats.PointCardRW();
+
+			return instance;
+		}
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the String representation of this DevCat */
+		public String toString() { return "PointCardRW"; }
+
+		/**
+		 * Accepts a DevCat Visitor object
+		 * @param visitor the DevCat Visitor object
+		 */
+		public void accept( DevCatVisitor visitor ) 
+		{ visitor.visitPointCardRW( this ); }
+
+		//---------------------------------------------------------------------
+		// Class instance
+		//
+
+		private static DevCat instance = null;
+	}	
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/Profile.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/Profile.java
new file mode 100644
index 0000000..07a0a4d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/Profile.java
@@ -0,0 +1,52 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.net.URL;
+
+/**
+ * Defines a Profile which is an abstract definition of a set of JposEntry 
+ * objects and each entry's required set of properties
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface Profile
+{
+	//-------------------------------------------------------------------------
+	// Public methods
+	//
+
+	/** @return the unique name of this profile */
+	public String getName();
+
+	/** @return the version of this profile */
+	public String getVersion();
+
+	/** @return a String description of this profile */
+	public String getDescription();
+
+	/** @return the vendor name of this profile */
+	public String getVendorName();
+
+	/** @return the URL for this vendor */
+	public URL getVendorUrl();
+
+	/** @return the list of DevCatInfo for this profile */
+	public DevCatInfoList getDevCatInfoList();
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/ProfileConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/ProfileConst.java
new file mode 100644
index 0000000..62bd765
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/ProfileConst.java
@@ -0,0 +1,41 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Defines constants used for the jpos.profile package
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface ProfileConst
+{
+	//-------------------------------------------------------------------------
+	// Public class constants
+	//
+
+	public static final PropType STRING_PROP_TYPE = StringPropType.getInstance();
+	public static final PropType INTEGER_PROP_TYPE = IntegerPropType.getInstance();
+	public static final PropType FLOAT_PROP_TYPE = FloatPropType.getInstance();
+	public static final PropType BOOLEAN_PROP_TYPE = BooleanPropType.getInstance();
+	public static final PropType CHARACTER_PROP_TYPE = CharacterPropType.getInstance();
+
+	public static final PropType[] PROPTYPE_ARRAY = { STRING_PROP_TYPE, INTEGER_PROP_TYPE, FLOAT_PROP_TYPE,
+													  BOOLEAN_PROP_TYPE, CHARACTER_PROP_TYPE };
+
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/ProfileException.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/ProfileException.java
new file mode 100644
index 0000000..3aeb1bf
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/ProfileException.java
@@ -0,0 +1,57 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Defines an exception class for the jpos.profile sub-system
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public class ProfileException extends Exception
+{
+	//-------------------------------------------------------------------------
+	// Ctor(s)
+	//
+
+	/** 
+	 * 1-arg ctor 
+	 * @param msg the exception's message
+	 */
+	public ProfileException( String msg ) { super( msg ); }
+
+	/** 
+	 * 2 args ctor 
+	 * @param msg the exception's message
+	 * @param origException the original exception causing this one
+	 */
+	public ProfileException( String msg, Exception e ) { this( msg ); origException = e; }
+
+	//-------------------------------------------------------------------------
+	// Public methods
+	//
+
+	/** @return the original exception causing this one */
+	public Exception getOrigException() { return origException; }
+
+	//-------------------------------------------------------------------------
+	// Private instance variables
+	//
+
+	private Exception origException = null;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/ProfileFactory.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/ProfileFactory.java
new file mode 100644
index 0000000..a3c8266
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/ProfileFactory.java
@@ -0,0 +1,35 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Defines an interface for creating Profile objects
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface ProfileFactory
+{
+	/**
+	 * @return a Profile object created parsing the XML file provided
+	 * @param xmlProfileFile the XML profile file
+	 * @exception jpos.profile.ProfileException if there is an error loading the profile
+	 * @since 1.3 (SF 2K meeting)
+	 */
+	public Profile createProfile( String xmlProfileFileName ) throws ProfileException;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/ProfileRegistry.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/ProfileRegistry.java
new file mode 100644
index 0000000..47d6a49
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/ProfileRegistry.java
@@ -0,0 +1,81 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.util.Enumeration;
+
+/**
+ * Defines a registry for aggregating Profile objects
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface ProfileRegistry
+{
+	/** @return the size of the registry */
+	public int getSize();
+
+	/** @return true if the registry is empty or not */
+	public boolean isEmpty();
+
+    /**
+     * @return true if there is an Profile with the specified logical name
+     * @param profileName the unique name of this profile
+     */
+    public boolean hasProfile( String profileName );
+
+    /**
+     * @return true if there is an Profile with the specified logical name
+     * @param profile the profile
+     */
+    public boolean hasProfile( Profile profile );
+
+    /** @return an enumeration of Profile objects  */
+    public Enumeration getProfiles();
+
+    /**
+     * @return the Profile for the profileName specified
+     * @param profileName the unique name of this profile
+     */
+    public Profile getProfile( String profileName );
+
+    /**
+     * Add an Profile for the service with logical name specified
+     * @param profile the profile
+     */
+    public void addProfile( Profile profile );
+
+    /**
+     * Add an Profile for the service with logical name specified
+     * @param profileName the unique name of this profile
+     * @param profile the profile
+     */
+    public void addProfile( String profileName, Profile profile );
+
+    /**
+     * Removes the specified Profile 
+     * @param profile the profile to remove
+     */
+    public void removeProfile( Profile profile );
+
+    /**
+     * Removes the Profile with the profileName specified 
+     * @param profileName the unique name of this profile
+     */
+    public void removeProfile( String profileName );
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/PropInfo.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/PropInfo.java
new file mode 100644
index 0000000..00e8441
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/PropInfo.java
@@ -0,0 +1,59 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Defines a JposEntry property info which is a set of properties information
+ * for a JposEntry
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface PropInfo
+{
+	//-------------------------------------------------------------------------
+	// Public methods
+	//
+
+	/** @return the name of this property */
+	public String getName();
+
+	/** @return the type of this property */
+	public PropType getType();
+
+	/** @return the default value for this property */
+	public PropValue getDefaultValue();
+
+	/** @return the list of possible values for this property */
+	public PropValueList getValues();
+
+	/** @return the DevCat that this property can be applied to */
+	public DevCat getDevCat();
+
+	/** @return the PropInfoViewer for this property */
+	public PropInfoViewer getViewer();
+
+	/** @return the Profile associated with this PropInfo */
+	public Profile getProfile();
+
+	/** @return a description of this PropInfo (this can be HTML formated) */
+	public String getDescription();
+
+	/** @return a short description of this PropInfo (this can be HTML formated) */
+	public String getShortDescription();
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/PropInfoList.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/PropInfoList.java
new file mode 100644
index 0000000..efc788f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/PropInfoList.java
@@ -0,0 +1,75 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Defines a simple list of PropInfo objects
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface PropInfoList
+{
+	/** @return the current size of this list */
+	public int getSize();
+
+	/** @return true if this list is empty */
+	public boolean isEmpty();
+
+	/**
+	 * Adds a new PropInfo to this list
+	 * @param propInfo the propInfo to add
+	 */
+	public void add( PropInfo propInfo );
+
+	/**
+	 * Removes the PropInfo to this list
+	 * @param propInfo the propInfo to remove
+	 */
+	public void remove( PropInfo propInfo );
+
+	/** Removes all PropInfo in this list */
+	public void removeAll();
+
+	/**
+	 * @return true if the PropInfo is already in the list
+	 * @param propInfo the propInfo
+	 */
+	public boolean contains( PropInfo propInfo );
+
+	/** @return an PropInfoList.Iterator object for this list */
+	public PropInfoList.Iterator iterator();
+
+	//-------------------------------------------------------------------------
+	// Inner interfaces
+	//
+
+	/**
+	 * Simple interface to iterate through the list
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 * @since 1.3 (SF 2K meeting)
+	 */
+	public interface Iterator
+	{
+		/** @return the next PropInfo in the iterator */
+		public PropInfo next();
+
+		/** @return true if there is a next PropInfo in the iterator */
+		public boolean hasNext();
+	}
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/PropInfoViewer.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/PropInfoViewer.java
new file mode 100644
index 0000000..d1120b7
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/PropInfoViewer.java
@@ -0,0 +1,28 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Defines a property viewer
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface PropInfoViewer
+{
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/PropType.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/PropType.java
new file mode 100644
index 0000000..1f7c285
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/PropType.java
@@ -0,0 +1,48 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Defines a property type
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface PropType
+{
+	/** @return a String representation of this PropType */
+	public String toString();
+
+	/** @return a String description of this PropType (can be HTML text) */
+	public String getDescription();
+
+	/** @return a Java class that defines this type */
+	public Class getJavaTypeClass();
+
+	/**
+	 * @return true if the object passed is of this PropType
+	 * @param obj the Java Object
+	 */
+	public boolean isValidValue( Object obj );
+
+	/**
+	 * @return true if the PropValue passed is of this PropType
+	 * @param propValue the PropValue
+	 */
+	public boolean isValidValue( PropValue obj );
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/PropValue.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/PropValue.java
new file mode 100644
index 0000000..364b715
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/PropValue.java
@@ -0,0 +1,42 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Defines a property value
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface PropValue
+{
+	/** @return the Java object that this value represents */
+	public Object getValue();
+
+	/** @return a String representation of this value */
+	public String toString();
+
+	/** @return the PropType for this PropValue */
+	public PropType getType();
+
+	/**
+	 * @return true if this and the other value are equal 
+	 * @param other the other PropValue
+	 */
+	public boolean equals( Object propValue );
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/PropValueList.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/PropValueList.java
new file mode 100644
index 0000000..fbf954e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/PropValueList.java
@@ -0,0 +1,75 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Defines a simple list of PropValue objects
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface PropValueList
+{
+	/** @return the current size of this list */
+	public int getSize();
+
+	/** @return true if this list is empty */
+	public boolean isEmpty();
+
+	/**
+	 * Adds a new PropValue to this list
+	 * @param propValue the propValue to add
+	 */
+	public void add( PropValue propValue );
+
+	/**
+	 * Removes the PropValue to this list
+	 * @param propValue the propValue to remove
+	 */
+	public void remove( PropValue propValue );
+
+	/** Removes all PropValue in this list */
+	public void removeAll();
+
+	/**
+	 * @return true if the PropValue is already in the list
+	 * @param propValue the PropValue
+	 */
+	public boolean contains( PropValue propValue );
+
+	/** @return an PropValueList.Iterator object for this list */
+	public PropValueList.Iterator iterator();
+
+	//-------------------------------------------------------------------------
+	// Inner interfaces
+	//
+
+	/**
+	 * Simple interface to iterate through the list
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 * @since 1.3 (SF 2K meeting)
+	 */
+	public interface Iterator
+	{ 
+		/** @return the next PropValue in the iterator */
+		public PropValue next();
+
+		/** @return true if there is a next PropValue in the iterator */
+		public boolean hasNext();
+	}
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/StringPropType.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/StringPropType.java
new file mode 100644
index 0000000..d3c8987
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/StringPropType.java
@@ -0,0 +1,83 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.io.Serializable;
+
+/**
+ * Defines a String property type
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public class StringPropType extends AbstractPropType implements PropType, Serializable
+{
+	//-------------------------------------------------------------------------
+	// Ctor(s)
+	//
+
+	/** Default ctor */
+	StringPropType() {}
+
+	//---------------------------------------------------------------------
+	// Class methods
+	//
+
+	/** @return the unique instance of this class (create if necessary) */
+	public static PropType getInstance()
+	{
+		if( instance == null )
+			instance = new StringPropType();
+
+		return instance;
+	}
+
+	//-------------------------------------------------------------------------
+	// Public methods
+	//
+
+	/** @return a String representation of this PropType */
+	public String toString() { return "StringPropType"; }
+
+	/** @return a Java class that defines this type */
+	public Class getJavaTypeClass() { return "".getClass(); }
+
+	/**
+	 * @return true if the object passed is of this PropType
+	 * @param s the String object
+	 */
+	public boolean isValidValue( String s ) { return ( s != null ); }
+
+	/**
+	 * @return true if the object passed is of this PropType
+	 * @param obj the Java Object
+	 */
+	public boolean isValidValue( Object obj ) { return ( obj instanceof String ); }
+
+	/**
+	 * @return true if the PropValue passed is of this PropType
+	 * @param propValue the PropValue
+	 */
+	public boolean isValidValue( PropValue propValue ) { return isValidValue( propValue.getValue() ); }
+
+	//-------------------------------------------------------------------------
+	// Class instance
+	//
+
+	private static PropType instance = null;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/profile/XercesProfileFactory.java b/org.eclipse.osbp.fork.jpos/src/jpos/profile/XercesProfileFactory.java
new file mode 100644
index 0000000..dd57a45
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/profile/XercesProfileFactory.java
@@ -0,0 +1,293 @@
+package jpos.profile;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.io.*;
+import java.util.*;
+import java.net.URL;
+import java.net.MalformedURLException;
+
+import javax.xml.parsers.*;
+
+import org.w3c.dom.*;
+import org.apache.xerces.parsers.DOMParser;
+import org.xml.sax.*;
+
+import jpos.util.XmlHelper;
+import jpos.util.tracing.Tracer;
+import jpos.util.tracing.TracerFactory;
+
+/**
+ * Default implementation of the ProfileFactory interface uses the Apache Xerces
+ * XML parser to create profiles from the XML file passed
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public class XercesProfileFactory extends Object implements ProfileFactory
+{
+	//-------------------------------------------------------------------------
+	// Ctor(s)
+	//
+
+	/** Default ctor */
+	public XercesProfileFactory() {}
+
+	//-------------------------------------------------------------------------
+	// Private methods
+	//
+
+	/**
+	 * @return a Profile object created from the Document object
+	 * @param document the XML document object
+	 * @exception jpos.profile.ProfileException if document is not in correct 
+	 * format
+	 */
+	private Profile extractProfile( Document document ) throws ProfileException
+	{
+		Element profileElement = document.getDocumentElement();
+
+		String name = profileElement.getAttribute( "name" );
+		DefaultProfile profile = new DefaultProfile( name );
+
+		NodeList nodeList = profileElement.getElementsByTagName( "ProfileInfo" );
+
+		if( nodeList.getLength() != 1 )
+			throw new ProfileException( "Profile does not contain 1 ProfileInfo element" );
+
+		Element profileInfoElement = (Element)nodeList.item( 0 );
+
+		profile.setVersion( profileInfoElement.getAttribute( "version" ) );
+		profile.setVendorName( profileInfoElement.getAttribute( "vendorName" ) );
+
+		try
+		{
+			String vendorUrlString = profileInfoElement.getAttribute( "vendorUrl" );
+			profile.setVendorUrl( new URL( vendorUrlString ) );
+		}
+		catch( MalformedURLException e )
+		{ throw new ProfileException( "ProfileInfo contains an invalid vendorUrl string" ); }
+
+		profile.setDescription( profileInfoElement.getAttribute( "description" ) );
+
+		return profile;
+	}
+
+	//-------------------------------------------------------------------------
+	// Package methods
+	//
+	
+    /**
+     * Parses the XML file into a valid XML document for the profile DTD
+     * @param xmlFileName the XML file name
+	 * @exception jpos.profile.ProfileException if the XML file could not be parsed
+     */
+	Document parse( String xmlFileName ) throws ProfileException
+    {
+		XmlHelper xmlHelper = new XmlHelper();
+
+        try
+        {
+			xmlHelper.setDtdFileName( PROFILE_DTD_FILE_NAME );
+			xmlHelper.setDtdFilePath( PROFILE_DTD_FILE_PATH );
+            xmlHelper.checkAndCreateTempDtd();
+
+			DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
+			docFactory.setNamespaceAware( true );
+			docFactory.setValidating( true );
+
+			DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
+			
+			DefaultErrorHandler errorHandler = this.new DefaultErrorHandler();
+			docBuilder.setErrorHandler( errorHandler );
+            
+			Document document = docBuilder.parse( new File( xmlFileName ) );
+
+			if( errorHandler.getErrorList().size() > 0 ||
+				errorHandler.getFatalErrorList().size() > 0 )
+				{
+					String msg = "Error while parsing XML file, set properties"+
+					             " jpos.tracing = ON in jpos.properties" + 
+					             " file for details";
+					throw new ProfileException( msg );					
+				}
+
+			return document;
+        }
+        catch( IOException ioe )
+        {
+			String msg = "Error loading XML profile file";
+			tracer.println( msg + ": Exception.message = " + ioe.getMessage() ); 
+			throw new ProfileException( msg, ioe ); 
+		}
+        catch( SAXException se )
+        { 
+			String msg = "Error parsing XML profile file";
+			tracer.println( msg + ": Exception.message = " + se.getMessage() ); 
+			throw new ProfileException( msg, se ); 
+		}
+		catch( ParserConfigurationException pce )
+		{
+			String msg = "Error creating XML parser";
+			tracer.println( msg + ": Exception.message = " + pce.getMessage() ); 
+			throw new ProfileException( msg, pce ); 
+		}
+		finally
+        { xmlHelper.removeTempDtd(); }
+    }
+
+    /**
+     * Parses the XML file into a valid XML document for the profile Schemas
+     * @param xmlFileName the XML file name
+	 * @exception jpos.profile.ProfileException if the XML file could not be parsed
+     */
+	Document parseSchema( String xmlFileName ) throws ProfileException
+    {
+        try
+        {
+			DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
+			docFactory.setNamespaceAware( true );
+			docFactory.setValidating( true );
+
+			DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
+			
+			DefaultErrorHandler errorHandler = this.new DefaultErrorHandler();
+			docBuilder.setErrorHandler( errorHandler );
+            
+            Document document = docBuilder.parse( new File( xmlFileName ) ); 
+
+			return document;
+        }
+        catch( IOException ioe )
+        {
+			String msg = "Error loading XML profile file";
+			tracer.println( msg + ": Excpetion.message = " + ioe.getMessage() ); 
+			throw new ProfileException( msg, ioe ); 
+		}
+        catch( SAXException se )
+        { 
+			String msg = "Error parsing XML profile file";
+			tracer.println( msg + ": Exception.message = " + se.getMessage() ); 
+
+			throw new ProfileException( msg, se ); 
+		}
+		catch( ParserConfigurationException pce )
+		{
+			String msg = "Error creating XML parser";
+			tracer.println( msg + ": Exception.message = " + pce.getMessage() ); 
+			throw new ProfileException( msg, pce ); 
+		}
+    }
+
+    /**
+     * Loads the Profile specified in the xmlFileName as a Profile object
+     * @param xmlFileName the XML file name
+	 * @exception jpos.profile.ProfileException if the XML file could not be 
+	 * parsed and the profile created
+     */
+	Profile load( String xmlFileName ) throws ProfileException
+    {			   
+		Document document = parse( xmlFileName );
+
+		return extractProfile( document );
+    }
+
+	//-------------------------------------------------------------------------
+	// Public methods
+	//
+
+	/**
+	 * @return a Profile object created parsing the XML file provided
+	 * @param xmlProfileFile the XML profile file
+	 * @exception jpos.profile.ProfileException if there is an error loading the profile
+	 */
+	public Profile createProfile( String xmlProfileFileName ) throws ProfileException
+	{
+		return load( xmlProfileFileName );
+	}
+
+	//-------------------------------------------------------------------------
+	// Instance variables
+	//
+
+	private Profile profile = null;
+
+    private DOMParser domParser = new DOMParser();
+	private DefaultErrorHandler errorHandler = this.new DefaultErrorHandler();
+	private Tracer tracer = TracerFactory.getInstance().
+							 createTracer( "XercesProfileFactory" );
+
+	//-------------------------------------------------------------------------
+	// Inner classes
+	//
+
+	/**
+	 * ErrorHandler inner class used to capture errors while parsing XML document
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 */
+	class DefaultErrorHandler extends Object implements org.xml.sax.ErrorHandler
+	{
+		//---------------------------------------------------------------------
+		// Package methods
+		//
+
+		List getErrorList() { return errorList; }
+
+		List getWarningList() { return warningList; }
+
+		List getFatalErrorList() { return fatalErrorList; }
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		public void warning( SAXParseException e ) throws SAXException 
+		{
+			tracer.println( "Line " + e.getLineNumber() + ": WARNING SAXParseException.message = " + e.getMessage() );
+			warningList.add( e );
+		}
+		
+		public void error( SAXParseException e ) throws SAXException 
+		{
+			tracer.println( "Line " + e.getLineNumber() + ": ERROR SAXParseException.message = " + e.getMessage() );
+			errorList.add( e );
+		}
+		
+		public void fatalError( SAXParseException e ) throws SAXException 
+		{
+			tracer.println( "Line " + e.getLineNumber() + ": FATALERROR SAXParseException.message = " + e.getMessage() );
+			fatalErrorList.add( e );
+		}
+
+		//---------------------------------------------------------------------
+		// Private variables
+		//
+
+		private List warningList = new ArrayList();
+		private List errorList = new ArrayList();
+		private List fatalErrorList = new ArrayList();
+	}
+
+	//-------------------------------------------------------------------------
+	// Class constants
+	//
+
+    public static final String PROFILE_DTD_FILE_NAME = "jcl_profile.dtd";
+    public static final String PROFILE_DTD_FILE_PATH = "jpos" + File.separator + "res" + File.separator;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/about_icon.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/about_icon.gif
new file mode 100644
index 0000000..04da95e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/about_icon.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/addentry_icon.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/addentry_icon.gif
new file mode 100644
index 0000000..0fc47e1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/addentry_icon.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/bumpbar.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/bumpbar.gif
new file mode 100644
index 0000000..90eb06b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/bumpbar.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/cashchanger.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/cashchanger.gif
new file mode 100644
index 0000000..90eb06b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/cashchanger.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/cashdrawer.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/cashdrawer.gif
new file mode 100644
index 0000000..09df423
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/cashdrawer.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/closefile_icon.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/closefile_icon.gif
new file mode 100644
index 0000000..064202b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/closefile_icon.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/coindispenser.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/coindispenser.gif
new file mode 100644
index 0000000..90eb06b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/coindispenser.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/config_icon.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/config_icon.gif
new file mode 100644
index 0000000..32b77ee
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/config_icon.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/copyentry_icon.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/copyentry_icon.gif
new file mode 100644
index 0000000..fa98681
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/copyentry_icon.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/deleteentry_icon.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/deleteentry_icon.gif
new file mode 100644
index 0000000..d9d1a33
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/deleteentry_icon.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/fiscalprinter.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/fiscalprinter.gif
new file mode 100644
index 0000000..90eb06b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/fiscalprinter.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/hardtotals.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/hardtotals.gif
new file mode 100644
index 0000000..50e526d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/hardtotals.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/keylock.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/keylock.gif
new file mode 100644
index 0000000..66abee8
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/keylock.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/linedisplay.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/linedisplay.gif
new file mode 100644
index 0000000..37b93fb
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/linedisplay.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/localmachine.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/localmachine.gif
new file mode 100644
index 0000000..0004818
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/localmachine.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/micr.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/micr.gif
new file mode 100644
index 0000000..220a180
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/micr.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/modifyentry_icon.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/modifyentry_icon.gif
new file mode 100644
index 0000000..f56a27e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/modifyentry_icon.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/msr.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/msr.gif
new file mode 100644
index 0000000..4c56acc
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/msr.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/newfile_icon.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/newfile_icon.gif
new file mode 100644
index 0000000..3513dfd
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/newfile_icon.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/openfile_icon.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/openfile_icon.gif
new file mode 100644
index 0000000..fabd567
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/openfile_icon.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/pinpad.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/pinpad.gif
new file mode 100644
index 0000000..90eb06b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/pinpad.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/poskeyboard.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/poskeyboard.gif
new file mode 100644
index 0000000..8cb89cb
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/poskeyboard.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/posprinter.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/posprinter.gif
new file mode 100644
index 0000000..2ceb675
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/posprinter.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/remoteorderdisplay.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/remoteorderdisplay.gif
new file mode 100644
index 0000000..90eb06b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/remoteorderdisplay.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/saveas_icon.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/saveas_icon.gif
new file mode 100644
index 0000000..8d3929c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/saveas_icon.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/savefile_icon.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/savefile_icon.gif
new file mode 100644
index 0000000..954f1ac
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/savefile_icon.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/scale.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/scale.gif
new file mode 100644
index 0000000..90eb06b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/scale.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/scanner.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/scanner.gif
new file mode 100644
index 0000000..90eb06b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/scanner.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/signaturecapture.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/signaturecapture.gif
new file mode 100644
index 0000000..90eb06b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/signaturecapture.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/toneindicator.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/toneindicator.gif
new file mode 100644
index 0000000..8092f42
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/toneindicator.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/images/unknown.gif b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/unknown.gif
new file mode 100644
index 0000000..90eb06b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/images/unknown.gif
Binary files differ
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/jcl.dtd b/org.eclipse.osbp.fork.jpos/src/jpos/res/jcl.dtd
new file mode 100644
index 0000000..ce6c4a8
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/jcl.dtd
@@ -0,0 +1,62 @@
+<?xml encoding="UTF-8"?>
+
+<!-- Revision: 1 2.0.0 http://www.nrf-arts.com/JavaPOS/JCL/jcl.dtd, docs, xml4j2, xml4j2_0_13  -->
+
+<!-- 
+     This is the DTD for all JCL (JavaPOS Config/Loader) entries.  It defines
+     the content necessary for all JCL entries in their XML file.  Please see the
+     example XML files in the release as well as the JCL documentation for details
+     on how to create your own XML files that are valid for this DTD.  You may also
+     use the JCL editor to create these files, as long as the JCL instalation is 
+     setup for XML (instead of serialized or CFG).
+     @author E. Michael Maximilien (maxim@us.ibm.com)
+     @since 1.2
+-->
+     
+<!ELEMENT JposEntries (JposEntry)*>
+
+<!ELEMENT JposEntry (creation, vendor, jpos, product, prop+)>
+<!ATTLIST JposEntry logicalName CDATA #REQUIRED>
+
+<!ELEMENT creation (#PCDATA)>
+<!ELEMENT vendor (#PCDATA)>
+<!ELEMENT jpos (#PCDATA)>
+<!ELEMENT product (#PCDATA)>
+<!ELEMENT prop (#PCDATA)>
+
+<!ATTLIST creation
+          factoryClass CDATA #REQUIRED
+          serviceClass CDATA #REQUIRED>
+          
+<!ATTLIST vendor
+          name CDATA #REQUIRED
+          url CDATA #IMPLIED>
+          
+<!ATTLIST jpos
+          version CDATA #REQUIRED
+          category ( BumpBar | CashChanger | CashDrawer | CoinDispenser | FiscalPrinter |
+                     HardTotals | Keylock | RemoteOrderDisplay | Scale | Scanner | SignatureCapture |
+                     ToneIndicator | LineDisplay | MICR | MSR | PinPad | POSKeyboard |
+                     POSPrinter ) #REQUIRED>
+                     
+<!ATTLIST product 
+          name CDATA #REQUIRED
+          description CDATA #REQUIRED
+          url CDATA #IMPLIED>
+          
+<!-- NOTE on the type attribute.  
+     This was added after the first release and therefore to maintain 
+     compatibility, it is defined as #IMPLIED so that it does not need 
+     to be specified and the default type for attributes with no type
+     is String.  for instance:
+               <prop name="propName" value="1234"/> 
+     is of type String and the "1234" value is kept as a String in the
+     JposEntry.  If you want the "1234" to be converted to an integer 
+     for instance then you must use the type attribute as follow:
+               <prop name="propName" value="1234" type="Integer"/> 
+-->
+<!ATTLIST prop
+          name CDATA #REQUIRED
+          value CDATA #REQUIRED
+          type ( String | Boolean | Byte | Character | Double | Float | 
+                 Integer | Long | Short ) #IMPLIED>
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/jcl.xsd b/org.eclipse.osbp.fork.jpos/src/jpos/res/jcl.xsd
new file mode 100644
index 0000000..9a520c6
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/jcl.xsd
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+
+<!--
+            targetNamespace="http://www.javapos.com/2002/jcl">
+		    xmlns="http://www.javapos.com/2002/jcl">
+-->		    
+    
+    <!-- Root JposEntries xsd:element definition -->
+    <xsd:complexType name="JposEntriesType">
+	    <xsd:sequence>
+                <xsd:element name="JposEntry" type="JposEntryType" minOccurs="0" maxOccurs="unbounded"/>
+    	</xsd:sequence>       
+    </xsd:complexType>
+    
+    <xsd:element name="JposEntries" type="JposEntriesType"/>
+    
+    <!-- All other xsd:complexType definitions -->
+    <xsd:complexType name="JposEntryType">
+        <xsd:sequence>
+            <xsd:element name="creation" type="CreationType" minOccurs="1" maxOccurs="1"/>
+            <xsd:element name="vendor" type="VendorType" minOccurs="1" maxOccurs="1"/>
+            <xsd:element name="jpos" type="JposType" minOccurs="1" maxOccurs="1"/>
+            <xsd:element name="product" type="ProductType" minOccurs="1" maxOccurs="1"/>
+            <xsd:element name="prop" type="PropType" minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+        <xsd:attribute name="logicalName" type="xsd:string" use="required"/>
+    </xsd:complexType>
+    
+    <xsd:complexType name="CreationType">
+        <xsd:attribute name="factoryClass" type="xsd:string" use="required"/>
+        <xsd:attribute name="serviceClass" type="xsd:string" use="required"/>
+    </xsd:complexType>
+    
+    <xsd:complexType name="VendorType">
+        <xsd:attribute name="name" type="xsd:string" use="required"/>
+        <xsd:attribute name="url" type="xsd:anyURI" use="required"/>
+    </xsd:complexType>
+
+    <xsd:complexType name="JposType">
+        <xsd:attribute name="category" type="JposDevCatType" use="required"/>
+        <xsd:attribute name="version" type="VersionType" use="required"/>
+    </xsd:complexType>
+
+    <xsd:complexType name="ProductType">
+        <xsd:attribute name="description" type="xsd:string" use="required"/>
+        <xsd:attribute name="name" type="xsd:string" use="required"/>
+        <xsd:attribute name="url" type="xsd:anyURI" use="required"/>
+    </xsd:complexType>
+
+    <xsd:complexType name="PropType">
+        <xsd:attribute name="name" type="xsd:string" use="required"/>
+        <xsd:attribute name="value" type="xsd:string" use="required"/>
+        <xsd:attribute name="type" type="PropTypeType" use="optional"/>
+    </xsd:complexType>
+                
+    <!-- All xsd:simpleType definitions -->        
+    <xsd:simpleType name="JposDevCatType">
+        <xsd:restriction base="xsd:string">
+            <xsd:enumeration value="BumpBar"/>
+            <xsd:enumeration value="CashChanger"/>
+            <xsd:enumeration value="CashDrawer"/>
+            <xsd:enumeration value="CheckScanner"/>
+            <xsd:enumeration value="CAT"/>
+            <xsd:enumeration value="CoinDispenser"/>
+            <xsd:enumeration value="FiscalPrinter"/>
+            <xsd:enumeration value="HardTotals"/>            
+            <xsd:enumeration value="Keylock"/>
+            <xsd:enumeration value="LineDisplay"/>
+            <xsd:enumeration value="MICR"/>
+            <xsd:enumeration value="MotionSensor"/>                        
+            <xsd:enumeration value="MSR"/>
+            <xsd:enumeration value="PINPad"/>
+            <xsd:enumeration value="PointCardRW"/>
+            <xsd:enumeration value="POSKeyboard"/>
+            <xsd:enumeration value="POSPower"/>                        
+            <xsd:enumeration value="POSPrinter"/>
+            <xsd:enumeration value="RemoteOrderDisplay"/>
+            <xsd:enumeration value="Scale"/>
+            <xsd:enumeration value="Scanner"/>
+            <xsd:enumeration value="SignatureCapture"/>
+            <xsd:enumeration value="ToneIndicator"/>                        
+        </xsd:restriction>
+    </xsd:simpleType>
+    
+    <xsd:simpleType name="PropTypeType">
+        <xsd:restriction base="xsd:string">
+            <xsd:enumeration value="String"/>
+            <xsd:enumeration value="Boolean"/>
+            <xsd:enumeration value="Character"/>
+            <xsd:enumeration value="Integer"/>
+            <xsd:enumeration value="Long"/>
+            <xsd:enumeration value="Byte"/>
+            <xsd:enumeration value="Short"/>
+            <xsd:enumeration value="Double"/>
+            <xsd:enumeration value="Float"/>
+            <xsd:enumeration value="URI"/>            
+        </xsd:restriction>
+    </xsd:simpleType>
+    
+    <xsd:simpleType name="VersionType">
+        <xsd:restriction base="xsd:string">
+            <xsd:enumeration value="1.4a"/>
+            <xsd:enumeration value="1.5"/>
+            <xsd:enumeration value="1.6"/>
+            <xsd:enumeration value="1.7"/>            
+        </xsd:restriction>
+    </xsd:simpleType>
+</xsd:schema>
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/jcl_profile.dtd b/org.eclipse.osbp.fork.jpos/src/jpos/res/jcl_profile.dtd
new file mode 100644
index 0000000..290bc01
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/jcl_profile.dtd
@@ -0,0 +1,51 @@
+<?xml encoding="UTF-8"?>
+
+<!-- Revision: 0 1.5 http://www.nrf-arts.com/JavaPOS/JCL/jcl_profile.dtd, docs, xerces, xerces1_1_1  -->
+
+<!ELEMENT Profile (ProfileInfo, JposEntryInfo*)>
+
+<!ELEMENT ProfileInfo EMPTY>
+
+<!ELEMENT JposEntryInfo (StandardProp*, RequiredProp*, OptionalProp*)>
+
+<!ELEMENT StandardProp (PropInfo)*>
+<!ELEMENT RequiredProp (PropInfo)*>
+<!ELEMENT OptionalProp (PropInfo)*>
+
+<!ELEMENT PropInfo (Tooltip?, PropValue+, PropViewer?)>
+<!ELEMENT PropValue (Tooltip?, Value+)>
+<!ELEMENT PropViewer (#PCDATA)>
+<!ELEMENT Tooltip (#PCDATA)>
+<!ELEMENT Value (#PCDATA)>
+
+<!ATTLIST Profile
+          name CDATA #REQUIRED>
+
+<!ATTLIST ProfileInfo
+          version CDATA #REQUIRED
+          vendorName CDATA #REQUIRED
+          vendorUrl CDATA #REQUIRED
+          description CDATA #IMPLIED>
+          
+<!ATTLIST JposEntryInfo
+          name CDATA #REQUIRED 
+          jposVersion CDATA #REQUIRED
+          deviceCategory ( BumpBar | CashChanger | CashDrawer | CAT | CoinDispenser | FiscalPrinter |
+                           HardTotals | Keylock | RemoteOrderDisplay | Scale | Scanner | SignatureCapture |
+                           ToneIndicator | LineDisplay | MICR | MSR | PinPad | POSKeyboard |
+                           POSPrinter | PointCardReaderWriter  ) #REQUIRED
+          imageFile CDATA #IMPLIED>
+
+<!ATTLIST PropInfo
+          name CDATA #REQUIRED>
+
+<!ATTLIST PropValue
+          type ( booleanValue | stringValue | integerValue | charValue | listValue ) #REQUIRED
+          choice ( one | multiple | fixed ) #IMPLIED
+          default CDATA #IMPLIED>
+          
+<!ATTLIST PropViewer
+          className CDATA #REQUIRED
+          tooltip CDATA #IMPLIED
+          propValueType ( booleanValue | stringValue | integerValue | 
+                          charValue | listValue ) #REQUIRED>
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/res/jpos.properties b/org.eclipse.osbp.fork.jpos/src/jpos/res/jpos.properties
new file mode 100644
index 0000000..c359b9d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/res/jpos.properties
@@ -0,0 +1,97 @@
+#------------------------------------------------------------------------------
+# JposTestCase.createPropFile() --> ./jpos/res/jpos.properties file
+# Thu Jul 05 11:37:25 EDT 2001
+# adjusted to local needs
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# Required properties
+# -------------------
+# 1) jpos.loader.serviceManagerClass
+#
+# 	 This property specifies the manager bootstrap class for the whole JCL.  Use
+#    this property to replace the default "simple" JCL implementation with your
+#    own.  The value must be a fully qualified class name that implements the
+#    interface jpos.loader.JposServiceManager
+#
+# 2) jpos.config.regPopulatorClass
+#
+#    This property specifies the registry populator class---that populates the
+#    entry registry.  It must be a fully qualified class name that implements
+#    the jpos.config.JposRegPopulator interface.  If you want to specify 
+#    multiple populators then you should instead use the:
+#    jpos.config.populator.class.<n>
+#    property---defined below---that allows you to specify many populators
+#    There are 3 populators that are provided with the JCL by default:
+#    a) jpos.config.simple.SimpleRegPopulator
+#       This populator loads/saves JposEntry objects as serialized objects in
+#       a Java serialized file, typically named: jpos.cfg
+#    b) jpos.config.simple.xml.XercesRegPopulator 
+#       This populator uses Xerces and implements an XML parser according to
+#       the jpos/res/jcl.dtd.  By default, the XML file must be named jpos.xml
+#       However, this named can be changed using the property (see below):
+#		jpos.config.populator.file.<n>
+#    c) jpos.config.simple.xml.Xerces2RegPopulator
+#       This populator uses Xerces2 and implements an XML parser according to
+#       the jpos/res/jcl.xsd XML schema.  The file name is same as above; however,
+#       since this parser expects an XML schema, the XML file header is different.
+#       See the jpos-schema.xml file.
+# 
+# NOTE: Xerces and Xerces2 are XML parsers from the http://www.apache.org 
+#       Jakarta projects.
+#------------------------------------------------------------------------------
+
+jpos.loader.serviceManagerClass=jpos.loader.simple.SimpleServiceManager
+
+#jpos.config.regPopulatorClass=jpos.config.simple.SimpleRegPopulator
+jpos.config.regPopulatorClass=jpos.config.simple.xml.SimpleXmlRegPopulator
+#jpos.config.regPopulatorClass=jpos.config.simple.xml.Xerces2RegPopulator
+
+#------------------------------------------------------------------------------
+# Use this property to for the JCL to load a specific file (cfg or XML)
+# when not using multiple populators via the jpos.config.populator.class.<n>
+# multi-property
+#------------------------------------------------------------------------------
+
+#jpos.config.populatorFile=jpos1.cfg
+jpos.config.populatorFile=C\:\\Program Files\\epson\\JavaPOS\\SetupPOS\\myprinter.xml
+
+#------------------------------------------------------------------------------
+# To define multiple populator then comment the property 
+# "jpos.config.regPopulatorClass"
+# and use the following multiproperty properties (defines 2 populators one 
+# XML and one serialized)
+#------------------------------------------------------------------------------
+
+#jpos.config.populator.class.0=jpos.config.simple.xml.SimpleXmlRegPopulator
+#jpos.config.populator.class.1=jpos.config.simple.SimpleRegPopulator
+
+#------------------------------------------------------------------------------
+# You can also define populator files for each populator as follows
+#------------------------------------------------------------------------------
+
+#jpos.config.populator.file.0=jpos0.xml
+#jpos.config.populator.file.1=jpos1.cfg
+
+#------------------------------------------------------------------------------
+# Tracing properties
+# ------------------
+# All tracing properties that are boolean attributes can be turned on of
+# off using ON/on/TRUE/true or OFF/false for any other value.
+# The available properties are (see commented properties below):
+# 1) jpos.tracing	
+# This is a legacy property and will turn the global tracer on.  You should
+# note that it is preferable to use the named tracing property instead
+# 2) jpos.util.tracing.TurnOnAllNamedTracers
+# This property when turned on will enable all named tracers.  A named tracer
+# will print out a message prepended by [<name>] where <name> is the name of
+# the tracer in question.
+# 3) jpos.util.tracing.TurnOnNamedTracers = name1, name2, ...
+# This will turn on the named tracers listed as name1, name2, ... this is 
+# useful if when all named tracers are on you want to filter the output
+#------------------------------------------------------------------------------
+
+#jpos.tracing=ON
+#jpos.util.tracing.TurnOnNamedTracers=XercesRegPopulator, AbstractRegPopulator, MainFrame
+#jpos.util.tracing.TurnOnNamedTracers=JposServiceLoader,SimpleEntryRegistry,SimpleRegPopulator,XercesRegPopulator 
+#jpos.util.tracing.TurnOnAllNamedTracers=OFF
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BaseService.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BaseService.java
new file mode 100644
index 0000000..aeea3dc
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BaseService.java
@@ -0,0 +1,53 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BaseService
+//
+//   Interface definining all capabilities, properties and methods
+//   that are common to all JavaPOS device services.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface BaseService
+{
+    // Properties
+    public String  getCheckHealthText() throws JposException;
+    public boolean getClaimed() throws JposException;
+    public boolean getDeviceEnabled() throws JposException;
+    public void    setDeviceEnabled(boolean deviceEnabled)
+                       throws JposException;
+    public String  getDeviceServiceDescription() throws JposException;
+    public int     getDeviceServiceVersion() throws JposException;
+    public boolean getFreezeEvents() throws JposException;
+    public void    setFreezeEvents(boolean freezeEvents) throws JposException;
+    public String  getPhysicalDeviceDescription() throws JposException;
+    public String  getPhysicalDeviceName() throws JposException;
+    public int     getState() throws JposException;
+
+    // Methods
+    public void    claim(int timeout) throws JposException;
+    public void    close() throws JposException;
+    public void    checkHealth(int level) throws JposException;
+    public void    directIO(int command, int[] data, Object object)
+                       throws JposException;
+    public void    open(String logicalName, EventCallbacks cb)
+                        throws JposException;
+    public void    release() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BeltService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BeltService112.java
new file mode 100644
index 0000000..1c6cb0f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BeltService112.java
@@ -0,0 +1,101 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BeltService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Belt for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//   New device category.
+// 2010-Mar-16 JavaPOS Release 1.12.4                              BS
+//   Corrected return types of getCapSpeedStepsBackward() and
+//   getCapSpeedStepsForward(). Was boolean, but should have been
+//   int.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface BeltService112
+  extends BaseService, JposServiceInstance
+{
+  // Capabilities
+  public boolean getCapAutoStopBackward() throws JposException;
+  public boolean getCapAutoStopBackwardItemCount() throws JposException;
+  public boolean getCapAutoStopForward() throws JposException;
+  public boolean getCapAutoStopForwardItemCount() throws JposException;
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapLightBarrierBackward() throws JposException;
+  public boolean getCapLightBarrierForward() throws JposException;
+  public boolean getCapMoveBackward() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public boolean getCapRealTimeData() throws JposException;
+  public boolean getCapSecurityFlapBackward() throws JposException;
+  public boolean getCapSecurityFlapForward() throws JposException;
+  public int     getCapSpeedStepsBackward() throws JposException;
+  public int     getCapSpeedStepsForward() throws JposException;
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Properties
+  public boolean getAutoStopBackward() throws JposException;
+  public void    setAutoStopBackward(boolean autoStop) throws JposException;
+  public int     getAutoStopBackwardDelayTime() throws JposException;
+  public void    setAutoStopBackwardDelayTime(int delayTime) throws JposException;
+  public int     getAutoStopBackwardItemCount() throws JposException;
+  public boolean getAutoStopForward() throws JposException;
+  public void    setAutoStopForward(boolean autoStop) throws JposException;
+  public int     getAutoStopForwardDelayTime() throws JposException;
+  public void    setAutoStopForwardDelayTime(int delayTime) throws JposException;
+  public int     getAutoStopForwardItemCount() throws JposException;
+  public boolean getLightBarrierBackwardInterrupted() throws JposException;
+  public boolean getLightBarrierForwardInterrupted() throws JposException;
+  public int     getMotionStatus() throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+  public boolean getSecurityFlapBackwardOpened() throws JposException;
+  public boolean getSecurityFlapForwardOpened() throws JposException;
+
+  // Methods
+  public void    adjustItemCount(int direction,
+                                 int count)
+                     throws JposException;
+  public void    compareFirmwareVersion(String firmwareFileName,
+                                        int[] result)
+                     throws JposException;
+  public void    moveBackward(int speed)
+                     throws JposException;
+  public void    moveForward(int speed)
+                     throws JposException;
+  public void    resetBelt()
+                     throws JposException;
+  public void    resetItemCount(int direction)
+                     throws JposException;
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    stopBelt()
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BeltService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BeltService113.java
new file mode 100644
index 0000000..2ffc051
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BeltService113.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BeltService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Belt for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface BeltService113 extends BeltService112
+{
+  // Nothing new added for release 1.13
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BeltService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BeltService114.java
new file mode 100644
index 0000000..25c5ece
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BeltService114.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BeltService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Belt for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface BeltService114 extends BeltService113
+{
+  // Nothing new added for release 1.14
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BillAcceptorService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BillAcceptorService111.java
new file mode 100644
index 0000000..f7d86b1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BillAcceptorService111.java
@@ -0,0 +1,91 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BillAcceptorService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bill Acceptor for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface BillAcceptorService111
+  extends BaseService, JposServiceInstance
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapDiscrepancy() throws JposException;
+  public boolean getCapFullSensor() throws JposException;
+  public boolean getCapJamSensor() throws JposException;
+  public boolean getCapNearFullSensor() throws JposException;
+  public boolean getCapPauseDeposit() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public boolean getCapRealTimeData() throws JposException;
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Properties
+  public String  getCurrencyCode() throws JposException;
+  public void    setCurrencyCode(String currencyCode) throws JposException;
+  public int     getDataCount() throws JposException;
+  public boolean getDataEventEnabled() throws JposException;
+  public void    setDataEventEnabled(boolean dataEventEnabled)
+                     throws JposException;
+  public int     getDepositAmount() throws JposException;
+  public String  getDepositCashList() throws JposException;
+  public String  getDepositCodeList() throws JposException;
+  public String  getDepositCounts() throws JposException;
+  public int     getDepositStatus() throws JposException;
+  public int     getFullStatus() throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+  public boolean getRealTimeDataEnabled() throws JposException;
+  public void    setRealTimeDataEnabled(boolean bEnabled) throws JposException;
+
+  // Methods
+  public void    adjustCashCounts(String cashCounts)
+                     throws JposException;
+  public void    beginDeposit()
+                     throws JposException;
+  public void    clearInput()  throws JposException;
+  public void    compareFirmwareVersion(String firmwareFileName,
+                                        int[] result)
+                     throws JposException;
+  public void    endDeposit(int success)
+                     throws JposException;
+  public void    fixDeposit()
+                     throws JposException;
+  public void    pauseDeposit(int control)
+                     throws JposException;
+  public void    readCashCounts(String[] cashCounts,
+                                boolean[] discrepancy)
+                     throws JposException;
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BillAcceptorService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BillAcceptorService112.java
new file mode 100644
index 0000000..70782c2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BillAcceptorService112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BillAcceptorService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bill Acceptor for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface BillAcceptorService112 extends BillAcceptorService111
+{
+  // Nothing new added for release 1.12
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BillAcceptorService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BillAcceptorService113.java
new file mode 100644
index 0000000..a624f9d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BillAcceptorService113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BillAcceptorService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bill Acceptor for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface BillAcceptorService113 extends BillAcceptorService112
+{
+  // Nothing new added for release 1.13
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BillAcceptorService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BillAcceptorService114.java
new file mode 100644
index 0000000..33fbc1d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BillAcceptorService114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BillAcceptorService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Bill Acceptor for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface BillAcceptorService114 extends BillAcceptorService113
+{
+  // Nothing new added for release 1.14
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BillDispenserService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BillDispenserService111.java
new file mode 100644
index 0000000..eb6f82d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BillDispenserService111.java
@@ -0,0 +1,83 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BillDispenserService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bill Dispenser for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface BillDispenserService111
+  extends BaseService, JposServiceInstance
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapDiscrepancy() throws JposException;
+  public boolean getCapEmptySensor() throws JposException;
+  public boolean getCapJamSensor() throws JposException;
+  public boolean getCapNearEmptySensor() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Properties
+  public boolean getAsyncMode() throws JposException;
+  public void    setAsyncMode(boolean asyncMode) throws JposException;
+  public int     getAsyncResultCode() throws JposException;
+  public int     getAsyncResultCodeExtended() throws JposException;
+  public String  getCurrencyCashList() throws JposException;
+  public String  getCurrencyCode() throws JposException;
+  public void    setCurrencyCode(String currencyCode) throws JposException;
+  public String  getCurrencyCodeList() throws JposException;
+  public int     getCurrentExit() throws JposException;
+  public void    setCurrentExit(int currentExit) throws JposException;
+  public int     getDeviceExits() throws JposException;
+  public int     getDeviceStatus() throws JposException;
+  public String  getExitCashList() throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+
+
+  // Methods
+  public void    adjustCashCounts(String cashCounts)
+                     throws JposException;
+  public void    clearOutput()  throws JposException;
+  public void    compareFirmwareVersion(String firmwareFileName,
+                                        int[] result)
+                     throws JposException;
+  public void    dispenseCash(String cashCounts)
+                     throws JposException;
+  public void    readCashCounts(String[] cashCounts,
+                                boolean[] discrepancy)
+                     throws JposException;
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BillDispenserService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BillDispenserService112.java
new file mode 100644
index 0000000..67dda58
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BillDispenserService112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BillDispenserService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bill Dispenser for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface BillDispenserService112 extends BillDispenserService111
+{
+  // Nothing new added for release 1.12
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BillDispenserService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BillDispenserService113.java
new file mode 100644
index 0000000..757e58d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BillDispenserService113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BillDispenserService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bill Dispenser for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface BillDispenserService113 extends BillDispenserService112
+{
+  // Nothing new added for release 1.13
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BillDispenserService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BillDispenserService114.java
new file mode 100644
index 0000000..af19e86
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BillDispenserService114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BillDispenserService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Bill Dispenser for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface BillDispenserService114 extends BillDispenserService113
+{
+  // Nothing new added for release 1.14
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BiometricsService110.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BiometricsService110.java
new file mode 100644
index 0000000..ecc2ef0
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BiometricsService110.java
@@ -0,0 +1,135 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BiometricsService110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Biometrics for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface BiometricsService110
+  extends BaseService, JposServiceInstance
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public boolean getCapPrematchData() throws JposException;
+  public boolean getCapRawSensorData() throws JposException;
+  public boolean getCapRealTimeData() throws JposException;
+  public int     getCapSensorColor() throws JposException;
+  public int     getCapSensorOrientation() throws JposException;
+  public int     getCapSensorType() throws JposException;
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapTemplateAdaptation() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Properties
+  public int     getAlgorithm() throws JposException;
+  public void    setAlgorithm(int algorithm) throws JposException;
+  public String  getAlgorithmList() throws JposException;
+  public boolean getAutoDisable() throws JposException;
+  public void    setAutoDisable(boolean autoDisable) throws JposException;
+  public byte[]  getBIR() throws JposException;
+  public int     getDataCount() throws JposException;
+  public boolean getDataEventEnabled() throws JposException;
+  public void    setDataEventEnabled(boolean dataEventEnabled)
+                     throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+  public byte[]  getRawSensorData() throws JposException;
+  public boolean getRealTimeDataEnabled() throws JposException;
+  public void    setRealTimeDataEnabled(boolean enabled) throws JposException;
+  public int     getSensorBPP() throws JposException;
+  public int     getSensorColor() throws JposException;
+  public void    setSensorColor(int color) throws JposException;
+  public int     getSensorHeight() throws JposException;
+  public int     getSensorOrientation() throws JposException;
+  public void    setSensorOrientation(int orientation) throws JposException;
+  public int     getSensorType() throws JposException;
+  public void    setSensorType(int type) throws JposException;
+  public int     getSensorWidth() throws JposException;
+
+  // Methods
+  public void    beginEnrollCapture(byte[] referenceBIR,
+                                    byte[] payload)
+                     throws JposException;
+  public void    beginVerifyCapture()
+                     throws JposException;
+  public void    clearInput()  throws JposException;
+  public void    clearInputProperties()
+                     throws JposException;
+  public void    compareFirmwareVersion(String firmwareFileName,
+                                        int[] result)
+                     throws JposException;
+  public void    endCapture()
+                     throws JposException;
+  public void    identify(int maxFARRequested,
+                          int maxFRRRequested,
+                          boolean FARPrecedence,
+                          byte[][] referenceBIRPopulation,
+                          int[][] candidateRanking,
+                          int timeout)
+                     throws JposException;
+  public void    identifyMatch(int maxFARRequested,
+                               int maxFRRRequested,
+                               boolean FARPrecedence,
+                               byte[] sampleBIR,
+                               byte[][] referenceBIRPopulation,
+                               int[][] candidateRanking)
+                     throws JposException;
+  public void    processPrematchData(byte[] capturedBIR,
+                                     byte[] prematchDataBIR,
+                                     byte[][] processedBIR)
+                     throws JposException;
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    verify(int maxFARRequested,
+                        int maxFRRRequested,
+                        boolean FARPrecedence,
+                        byte[] referenceBIR,
+                        byte[][] adaptedBIR,
+                        boolean[] result,
+                        int[] FARAchieved,
+                        int[] FRRAchieved,
+                        byte[][] payload,
+                        int timeout)
+                     throws JposException;
+  public void    verifyMatch(int maxFARRequested,
+                             int maxFRRRequested,
+                             boolean FARPrecedence,
+                             byte[] sampleBIR,
+                             byte[] referenceBIR,
+                             byte[][] adaptedBIR,
+                             boolean[] result,
+                             int[] FARAchieved,
+                             int[] FRRAchieved,
+                             byte[][] payload)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BiometricsService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BiometricsService111.java
new file mode 100644
index 0000000..13aef21
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BiometricsService111.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BiometricsService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Biometrics for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface BiometricsService111 extends BiometricsService110
+{
+  // Specification changes marked as version 1.11 were incorporated into
+  // the JavaPOS controls 1.10.2 in order to fix implementation issues
+  // for early adopters.
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BiometricsService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BiometricsService112.java
new file mode 100644
index 0000000..10c38bc
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BiometricsService112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BiometricsService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Biometrics for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface BiometricsService112 extends BiometricsService111
+{
+  // Nothing new added for release 1.12
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BiometricsService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BiometricsService113.java
new file mode 100644
index 0000000..52e32be
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BiometricsService113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BiometricsService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Biometrics for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface BiometricsService113 extends BiometricsService112
+{
+  // Nothing new added for release 1.13
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BiometricsService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BiometricsService114.java
new file mode 100644
index 0000000..86cd687
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BiometricsService114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BiometricsService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Biometrics for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface BiometricsService114 extends BiometricsService113
+{
+  // Nothing new added for release 1.14
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService110.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService110.java
new file mode 100644
index 0000000..31a3abf
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService110.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BumpBarService110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bump Bar for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface BumpBarService110
+  extends BumpBarService19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService111.java
new file mode 100644
index 0000000..9e7b5da
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BumpBarService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bump Bar for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface BumpBarService111 extends BumpBarService110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService112.java
new file mode 100644
index 0000000..116a041
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BumpBarService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bump Bar for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface BumpBarService112 extends BumpBarService111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService113.java
new file mode 100644
index 0000000..7755290
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BumpBarService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bump Bar for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface BumpBarService113 extends BumpBarService112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService114.java
new file mode 100644
index 0000000..ab9bd17
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BumpBarService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Bump Bar for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface BumpBarService114 extends BumpBarService113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService13.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService13.java
new file mode 100644
index 0000000..023d26a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService13.java
@@ -0,0 +1,69 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BumpBarService13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bump Bar for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface BumpBarService13 extends BaseService
+{
+    // Capabilities
+    public int     getCapPowerReporting() throws JposException;
+    public boolean getCapTone() throws JposException;
+
+    // Properties
+    public boolean getAsyncMode() throws JposException;
+    public void    setAsyncMode(boolean asyncMode) throws JposException;
+    public int     getAutoToneDuration() throws JposException;
+    public void    setAutoToneDuration(int autoToneDuration) throws JposException;
+    public int     getAutoToneFrequency() throws JposException;
+    public void    setAutoToneFrequency(int autoToneFrequency) throws JposException;
+    public int     getBumpBarDataCount() throws JposException;
+    public int     getCurrentUnitID() throws JposException;
+    public void    setCurrentUnitID(int currentUnitID) throws JposException;
+    public int     getDataCount() throws JposException;
+    public boolean getDataEventEnabled() throws JposException;
+    public void    setDataEventEnabled(boolean dataEventEnabled) throws JposException;
+    public String  getErrorString() throws JposException;
+    public int     getErrorUnits() throws JposException;
+    public String  getEventString() throws JposException;
+    public int     getEventUnitID() throws JposException;
+    public int     getEventUnits() throws JposException;
+    public int     getKeys() throws JposException;
+    public int     getOutputID() throws JposException;
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+    public int     getTimeout() throws JposException;
+    public void    setTimeout(int timeout) throws JposException;
+    public int     getUnitsOnline() throws JposException;
+
+    // Methods
+    public void    bumpBarSound(int units, int frequency, int duration,
+                       int numberOfCycles, int interSoundWait)
+                       throws JposException;
+    public void    clearInput()  throws JposException;
+    public void    clearOutput()  throws JposException;
+    public void    setKeyTranslation(int units, int scanCode, int logicalKey)
+                       throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService14.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService14.java
new file mode 100644
index 0000000..c9215b1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BumpBarService14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bump Bar for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface BumpBarService14 extends BumpBarService13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService15.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService15.java
new file mode 100644
index 0000000..9cbaecf
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService15.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BumpBarService15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bump Bar for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2000-Apr-17 JavaPOS Release 1.5                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface BumpBarService15
+  extends BumpBarService14, JposServiceInstance
+{
+  // Nothing new added for release 1.5
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService16.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService16.java
new file mode 100644
index 0000000..714275b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService16.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BumpBarService16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bump Bar for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2001-Apr-18 JavaPOS Release 1.6                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface BumpBarService16
+  extends BumpBarService15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService17.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService17.java
new file mode 100644
index 0000000..1c96b5d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService17.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BumpBarService17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bump Bar for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface BumpBarService17
+  extends BumpBarService16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService18.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService18.java
new file mode 100644
index 0000000..653f8cd
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService18.java
@@ -0,0 +1,42 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BumpBarService18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bump Bar for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface BumpBarService18
+  extends BumpBarService17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService19.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService19.java
new file mode 100644
index 0000000..fb74aa8
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/BumpBarService19.java
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// BumpBarService19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Bump Bar for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface BumpBarService19
+  extends BumpBarService18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService110.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService110.java
new file mode 100644
index 0000000..1083589
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService110.java
@@ -0,0 +1,32 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CATService110
+//
+//   Interface definining all capabilities, properties and methods that are
+//   specific to the Credit Authorization Terminal for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+//////////////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CATService110
+  extends CATService19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService111.java
new file mode 100644
index 0000000..6cd515f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService111.java
@@ -0,0 +1,31 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CATService111
+//
+//   Interface definining all capabilities, properties and methods that are
+//   specific to the Credit Authorization Terminal for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+//////////////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CATService111 extends CATService110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService112.java
new file mode 100644
index 0000000..3f3ff9b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService112.java
@@ -0,0 +1,31 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CATService112
+//
+//   Interface definining all capabilities, properties and methods that are
+//   specific to the Credit Authorization Terminal for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+//////////////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CATService112 extends CATService111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService113.java
new file mode 100644
index 0000000..49f0c15
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService113.java
@@ -0,0 +1,34 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CATService113
+//
+//   Interface definining all capabilities, properties and methods that are
+//   specific to the Credit Authorization Terminal for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+// 2010-Nov-17 JavaPOS Release 1.13.3                              BS
+//   Added missing property OutputID
+//
+//////////////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CATService113 extends CATService112
+{
+  // Properties
+  public int     getOutputID() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService114.java
new file mode 100644
index 0000000..6593f2a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService114.java
@@ -0,0 +1,31 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CATService114
+//
+// Interface definining all capabilities, properties and methods that are
+//  specific to the Credit Authorization Terminal for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+//////////////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CATService114 extends CATService113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService14.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService14.java
new file mode 100644
index 0000000..3ede951
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService14.java
@@ -0,0 +1,88 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CATService14
+//
+//   Interface definining all capabilities, properties and methods that are
+//   specific to the Credit Authorization Terminal for release 1.4.
+//
+// Modification history
+// ---------------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                           BS
+//
+//////////////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CATService14 extends BaseService
+{
+    // Capabilities
+    public boolean getCapAdditionalSecurityInformation() throws JposException;
+    public boolean getCapAuthorizeCompletion() throws JposException;
+    public boolean getCapAuthorizePreSales() throws JposException;
+    public boolean getCapAuthorizeRefund() throws JposException;
+    public boolean getCapAuthorizeVoid() throws JposException;
+    public boolean getCapAuthorizeVoidPreSales() throws JposException;
+    public boolean getCapCenterResultCode() throws JposException;
+    public boolean getCapCheckCard() throws JposException;
+    public int     getCapDailyLog() throws JposException;
+    public boolean getCapInstallments() throws JposException;
+    public boolean getCapPaymentDetail() throws JposException;
+	  public int     getCapPowerReporting() throws JposException;
+    public boolean getCapTaxOthers() throws JposException;
+    public boolean getCapTransactionNumber() throws JposException;
+    public boolean getCapTrainingMode() throws JposException;
+
+    // Properties
+    public String  getAccountNumber() throws JposException;
+    public String  getAdditionalSecurityInformation() throws JposException;
+    public void    setAdditionalSecurityInformation(String securityInfo)
+                       throws JposException;
+    public String  getApprovalCode() throws JposException;
+    public boolean getAsyncMode() throws JposException;
+    public void    setAsyncMode(boolean asyncMode) throws JposException;
+    public String  getCardCompanyID() throws JposException;
+    public String  getCenterResultCode() throws JposException;
+    public String  getDailyLog() throws JposException;
+    public int     getPaymentCondition() throws JposException;
+    public String  getPaymentDetail() throws JposException;
+		public int     getPowerNotify() throws JposException;
+		public void    setPowerNotify(int powerNotify) throws JposException;
+		public int     getPowerState() throws JposException;
+    public int     getSequenceNumber() throws JposException;
+    public String  getSlipNumber() throws JposException;
+    public boolean getTrainingMode() throws JposException;
+    public void    setTrainingMode(boolean trainingMode) throws JposException;
+    public String  getTransactionNumber() throws JposException;
+    public String  getTransactionType() throws JposException;
+
+    // Methods
+    public void    accessDailyLog(int sequenceNumber, int type, int timeout)
+                       throws JposException;
+    public void    authorizeCompletion(int sequenceNumber, long amount,
+                       long taxOthers, int timeout) throws JposException;
+    public void    authorizePreSales(int sequenceNumber, long amount,
+                       long taxOthers, int timeout) throws JposException;
+    public void    authorizeRefund(int sequenceNumber, long amount,
+                       long taxOthers, int timeout) throws JposException;
+    public void    authorizeSales(int sequenceNumber, long amount,
+                       long taxOthers, int timeout) throws JposException;
+    public void    authorizeVoid(int sequenceNumber, long amount,
+                       long taxOthers, int timeout) throws JposException;
+    public void    authorizeVoidPreSales(int sequenceNumber, long amount,
+                       long taxOthers, int timeout) throws JposException;
+    public void    checkCard(int sequenceNumber, int timeout)
+                       throws JposException;
+    public void    clearOutput() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService15.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService15.java
new file mode 100644
index 0000000..258c9d9
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService15.java
@@ -0,0 +1,35 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CATService15
+//
+//   Interface definining all capabilities, properties and methods that are
+//   specific to the Credit Authorization Terminal for release 1.5.
+//
+// Modification history
+// ---------------------------------------------------------------------------
+// 2000-Apr-17 JavaPOS Release 1.5                                         BS
+//
+//////////////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface CATService15
+  extends CATService14, JposServiceInstance
+{
+	// Properties
+	public int     getPaymentMedia() throws JposException;
+	public void    setPaymentMedia(int paymentMedia) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService16.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService16.java
new file mode 100644
index 0000000..4b82a14
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService16.java
@@ -0,0 +1,32 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CATService16
+//
+//   Interface definining all capabilities, properties and methods that are
+//   specific to the Credit Authorization Terminal for release 1.6.
+//
+// Modification history
+// ---------------------------------------------------------------------------
+// 2001-Apr-18 JavaPOS Release 1.6                                         BS
+//
+//////////////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CATService16
+  extends CATService15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService17.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService17.java
new file mode 100644
index 0000000..49ebfe1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService17.java
@@ -0,0 +1,32 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CATService17
+//
+//   Interface definining all capabilities, properties and methods that are
+//   specific to the Credit Authorization Terminal for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                       BS
+//
+//////////////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CATService17
+  extends CATService16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService18.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService18.java
new file mode 100644
index 0000000..4fba609
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService18.java
@@ -0,0 +1,42 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CATService18
+//
+//   Interface definining all capabilities, properties and methods that are
+//   specific to the Credit Authorization Terminal for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------------
+// 03-Jun-2003 JavaPOS Release 1.8                                       BS
+//
+//////////////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CATService18
+  extends CATService17
+{
+	// Capabilities
+	public boolean getCapStatisticsReporting() throws JposException;
+	public boolean getCapUpdateStatistics() throws JposException;
+
+	// Methods
+	public void    resetStatistics(String statisticsBuffer)
+										 throws JposException;
+	public void    retrieveStatistics(String[] statisticsBuffer)
+										 throws JposException;
+	public void    updateStatistics(String statisticsBuffer)
+										 throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService19.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService19.java
new file mode 100644
index 0000000..cc6ac19
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CATService19.java
@@ -0,0 +1,55 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CATService19
+//
+//   Interface definining all capabilities, properties and methods that are
+//   specific to the Credit Authorization Terminal for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//
+//////////////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CATService19
+  extends CATService18
+{
+  // Capabilities
+  public boolean getCapCashDeposit() throws JposException;
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapLockTerminal() throws JposException;
+  public boolean getCapLogStatus() throws JposException;
+  public boolean getCapUnlockTerminal() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Properties
+  public long    getBalance() throws JposException;
+  public int     getLogStatus() throws JposException;
+  public long    getSettledAmount() throws JposException;
+
+  // Methods
+  public void    cashDeposit(int sequenceNumber, long amount, int timeout)
+                     throws JposException;
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    lockTerminal()
+                     throws JposException;
+  public void    unlockTerminal()
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService110.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService110.java
new file mode 100644
index 0000000..f4bbca2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService110.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerService110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Changer for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CashChangerService110
+  extends CashChangerService19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService111.java
new file mode 100644
index 0000000..0815918
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService111.java
@@ -0,0 +1,46 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Changer for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+// 2008-Jul-23 Corrected spelling mistake of setCurrentService     BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CashChangerService111 extends CashChangerService110
+{
+  // Capabilities
+  public boolean getCapJamSensor() throws JposException;
+  public boolean getCapRealTimeData() throws JposException;
+
+  // Properties
+  public int     getCurrentService() throws JposException;
+  public void    setCurrentService(int currentService) throws JposException;
+  public boolean getRealTimeDataEnabled() throws JposException;
+  public void    setRealTimeDataEnabled(boolean bEnabled) throws JposException;
+  public int     getServiceCount() throws JposException;
+  public int     getServiceIndex() throws JposException;
+
+  // Methods
+  public void    adjustCashCounts(String cashCounts)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService112.java
new file mode 100644
index 0000000..e8cbe7f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Changer for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CashChangerService112 extends CashChangerService111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService113.java
new file mode 100644
index 0000000..5d98083
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Changer for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CashChangerService113 extends CashChangerService112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService114.java
new file mode 100644
index 0000000..0a5e103
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Cash Changer for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CashChangerService114 extends CashChangerService113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService12.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService12.java
new file mode 100644
index 0000000..6687347
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService12.java
@@ -0,0 +1,58 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerService12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to Cash Changer for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CashChangerService12 extends BaseService
+{
+    // Capabilities
+    public boolean getCapDiscrepancy() throws JposException;
+    public boolean getCapEmptySensor() throws JposException;
+    public boolean getCapFullSensor() throws JposException;
+    public boolean getCapNearEmptySensor() throws JposException;
+    public boolean getCapNearFullSensor() throws JposException;
+
+    // Properties
+    public boolean getAsyncMode() throws JposException;
+    public void    setAsyncMode(boolean asyncMode) throws JposException;
+    public int     getAsyncResultCode() throws JposException;
+    public int     getAsyncResultCodeExtended() throws JposException;
+    public String  getCurrencyCashList() throws JposException;
+    public String  getCurrencyCode() throws JposException;
+    public void    setCurrencyCode(String currencyCode) throws JposException;
+    public String  getCurrencyCodeList() throws JposException;
+    public int     getCurrentExit() throws JposException;
+    public void    setCurrentExit(int currentExit) throws JposException;
+    public int     getDeviceExits() throws JposException;
+    public int     getDeviceStatus() throws JposException;
+    public String  getExitCashList() throws JposException;
+    public int     getFullStatus() throws JposException;
+
+    // Methods
+    public void    dispenseCash(String cashCounts) throws JposException;
+    public void    dispenseChange(int amount) throws JposException;
+    public void    readCashCounts(String[] cashCounts,
+                       boolean[] discrepancy) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService13.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService13.java
new file mode 100644
index 0000000..1b4ec20
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService13.java
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerService13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Changer for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CashChangerService13 extends CashChangerService12
+{
+    // Capabilities
+    public int     getCapPowerReporting() throws JposException;
+
+    // Properties
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService14.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService14.java
new file mode 100644
index 0000000..c1d9c94
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerService14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Changer for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CashChangerService14 extends CashChangerService13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService15.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService15.java
new file mode 100644
index 0000000..f1c15d4
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService15.java
@@ -0,0 +1,55 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerService15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Changer for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2000-Apr-17 JavaPOS Release 1.5                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface CashChangerService15
+  extends CashChangerService14, JposServiceInstance
+{
+    // Capabilities
+    public boolean getCapDeposit() throws JposException;
+    public boolean getCapDepositDataEvent() throws JposException;
+    public boolean getCapPauseDeposit() throws JposException;
+    public boolean getCapRepayDeposit() throws JposException;
+
+    // Properties
+    public int     getDataCount() throws JposException;
+    public boolean getDataEventEnabled() throws JposException;
+    public void    setDataEventEnabled(boolean dataEventEnabled)
+                       throws JposException;
+    public int     getDepositAmount() throws JposException;
+    public String  getDepositCashList() throws JposException;
+    public String  getDepositCodeList() throws JposException;
+    public String  getDepositCounts() throws JposException;
+    public int     getDepositStatus() throws JposException;
+
+    // Methods
+    public void    beginDeposit() throws JposException;
+    public void    clearInput() throws JposException;
+    public void    endDeposit(int success) throws JposException;
+    public void    fixDeposit() throws JposException;
+    public void    pauseDeposit(int control) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService16.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService16.java
new file mode 100644
index 0000000..5f5bd0a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService16.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerService16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Changer for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2001-Apr-18 JavaPOS Release 1.6                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CashChangerService16
+  extends CashChangerService15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService17.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService17.java
new file mode 100644
index 0000000..02bf4ad
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService17.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerService17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Changer for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CashChangerService17
+  extends CashChangerService16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService18.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService18.java
new file mode 100644
index 0000000..ede02a8
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService18.java
@@ -0,0 +1,42 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerService18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Changer for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CashChangerService18
+  extends CashChangerService17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService19.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService19.java
new file mode 100644
index 0000000..27ede7c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashChangerService19.java
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashChangerService19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Changer for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CashChangerService19
+  extends CashChangerService18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService110.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService110.java
new file mode 100644
index 0000000..fc903ff
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService110.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerService110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Drawer for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CashDrawerService110
+  extends CashDrawerService19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService111.java
new file mode 100644
index 0000000..66f2377
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Drawer for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CashDrawerService111 extends CashDrawerService110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService112.java
new file mode 100644
index 0000000..f765a1c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Drawer for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CashDrawerService112 extends CashDrawerService111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService113.java
new file mode 100644
index 0000000..343a974
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Drawer for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CashDrawerService113 extends CashDrawerService112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService114.java
new file mode 100644
index 0000000..1fd20fc
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Cash Drawer for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CashDrawerService114 extends CashDrawerService113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService12.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService12.java
new file mode 100644
index 0000000..eec3bbb
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService12.java
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerService12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to Cash Drawer for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CashDrawerService12 extends BaseService
+{
+    // Capabilities
+    public boolean getCapStatus() throws JposException;
+
+    // Properties
+    public boolean getDrawerOpened() throws JposException;
+
+    // Methods
+    public void    openDrawer() throws JposException;
+    public void    waitForDrawerClose(int beepTimeout, int beepFrequency,
+                       int beepDuration, int beepDelay) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService13.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService13.java
new file mode 100644
index 0000000..55e3b5b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService13.java
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerService13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Drawer for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CashDrawerService13 extends CashDrawerService12
+{
+    // Capabilities
+    public int     getCapPowerReporting() throws JposException;
+
+    // Properties
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService14.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService14.java
new file mode 100644
index 0000000..6ca2ef9
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerService14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Drawer for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CashDrawerService14 extends CashDrawerService13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService15.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService15.java
new file mode 100644
index 0000000..532148f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService15.java
@@ -0,0 +1,34 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerService15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Drawer for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2000-Apr-17 JavaPOS Release 1.5                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface CashDrawerService15
+  extends CashDrawerService14, JposServiceInstance
+{
+  // Capabilities
+  public boolean getCapStatusMultiDrawerDetect() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService16.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService16.java
new file mode 100644
index 0000000..848be57
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService16.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerService16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Drawer for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2001-Apr-18 JavaPOS Release 1.6                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CashDrawerService16
+  extends CashDrawerService15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService17.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService17.java
new file mode 100644
index 0000000..9896bd7
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService17.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerService17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Drawer for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CashDrawerService17
+  extends CashDrawerService16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService18.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService18.java
new file mode 100644
index 0000000..c85ee74
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService18.java
@@ -0,0 +1,42 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerService18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Drawer for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CashDrawerService18
+  extends CashDrawerService17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService19.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService19.java
new file mode 100644
index 0000000..9130faf
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CashDrawerService19.java
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CashDrawerService19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Cash Drawer for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CashDrawerService19
+  extends CashDrawerService18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CheckScannerService110.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CheckScannerService110.java
new file mode 100644
index 0000000..1c183e4
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CheckScannerService110.java
@@ -0,0 +1,35 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CheckScannerService110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Check Scanner for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface CheckScannerService110
+  extends CheckScannerService19
+{
+  // Methods
+  public void    clearInputProperties()
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CheckScannerService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CheckScannerService111.java
new file mode 100644
index 0000000..1756a1a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CheckScannerService111.java
@@ -0,0 +1,30 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CheckScannerService111
+//
+//   Interface definining all new capabilities, properties and
+//                                Check Scanner
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CheckScannerService111 extends CheckScannerService110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CheckScannerService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CheckScannerService112.java
new file mode 100644
index 0000000..800c26b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CheckScannerService112.java
@@ -0,0 +1,30 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CheckScannerService112
+//
+//   Interface definining all new capabilities, properties and
+//                                Check Scanner
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CheckScannerService112 extends CheckScannerService111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CheckScannerService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CheckScannerService113.java
new file mode 100644
index 0000000..c1deab6
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CheckScannerService113.java
@@ -0,0 +1,30 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CheckScannerService113
+//
+//   Interface definining all new capabilities, properties and
+//                                Check Scanner
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CheckScannerService113 extends CheckScannerService112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CheckScannerService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CheckScannerService114.java
new file mode 100644
index 0000000..e8a6544
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CheckScannerService114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CheckScannerService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Check Scanner for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CheckScannerService114 extends CheckScannerService113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CheckScannerService17.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CheckScannerService17.java
new file mode 100644
index 0000000..11f0f6a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CheckScannerService17.java
@@ -0,0 +1,95 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CheckScannerService17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Check Scanner for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface CheckScannerService17
+  extends BaseService, JposServiceInstance
+{
+  // Capabilities
+  public boolean getCapAutoGenerateFileID() throws JposException;
+  public boolean getCapAutoGenerateImageTagData() throws JposException;
+  public boolean getCapAutoSize() throws JposException;
+  public int     getCapColor() throws JposException;
+  public boolean getCapConcurrentMICR() throws JposException;
+  public boolean getCapDefineCropArea() throws JposException;
+  public int     getCapImageFormat() throws JposException;
+  public boolean getCapImageTagData() throws JposException;
+  public boolean getCapMICRDevice() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public boolean getCapStoreImageFiles() throws JposException;
+  public boolean getCapValidationDevice() throws JposException;
+
+  // Properties
+  public boolean getAutoDisable() throws JposException;
+  public void    setAutoDisable(boolean autoDisable) throws JposException;
+  public int     getColor() throws JposException;
+  public void    setColor(int nColor) throws JposException;
+  public boolean getConcurrentMICR() throws JposException;
+  public void    setConcurrentMICR(boolean bConcurrentMICR) throws JposException;
+  public int     getCropAreaCount() throws JposException;
+  public int     getDataCount() throws JposException;
+  public boolean getDataEventEnabled() throws JposException;
+  public void    setDataEventEnabled(boolean dataEventEnabled)
+                     throws JposException;
+  public int     getDocumentHeight() throws JposException;
+  public void    setDocumentHeight(int nDocumentHeight) throws JposException;
+  public int     getDocumentWidth() throws JposException;
+  public void    setDocumentWidth(int nDocumentWidth) throws JposException;
+  public String  getFileID() throws JposException;
+  public void    setFileID(String sFileID) throws JposException;
+  public int     getFileIndex() throws JposException;
+  public void    setFileIndex(int nFileIndex) throws JposException;
+  public byte[]  getImageData() throws JposException;
+  public int     getImageFormat() throws JposException;
+  public void    setImageFormat(int nImageFormat) throws JposException;
+  public int     getImageMemoryStatus() throws JposException;
+  public String  getImageTagData() throws JposException;
+  public void    setImageTagData(String sImageTagData) throws JposException;
+  public int     getMapMode() throws JposException;
+  public void    setMapMode(int nMapMode) throws JposException;
+  public int     getMaxCropAreas() throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+  public int     getQuality() throws JposException;
+  public void    setQuality(int nQuality) throws JposException;
+  public String  getQualityList() throws JposException;
+  public int     getRemainingImagesEstimate() throws JposException;
+
+  // Methods
+  public void    beginInsertion(int timeout) throws JposException;
+  public void    beginRemoval(int timeout) throws JposException;
+  public void    clearImage(int by) throws JposException;
+  public void    clearInput() throws JposException;
+  public void    defineCropArea(int cropAreaID, int x, int y, int cx, int cy)
+                   throws JposException;
+  public void    endInsertion() throws JposException;
+  public void    endRemoval() throws JposException;
+  public void    retrieveImage(int cropAreaID) throws JposException;
+  public void    retrieveMemory(int by) throws JposException;
+  public void    storeImage(int by) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CheckScannerService18.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CheckScannerService18.java
new file mode 100644
index 0000000..d32a619
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CheckScannerService18.java
@@ -0,0 +1,43 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CheckScannerService18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Check Scanner for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface CheckScannerService18
+  extends CheckScannerService17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CheckScannerService19.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CheckScannerService19.java
new file mode 100644
index 0000000..98b9a57
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CheckScannerService19.java
@@ -0,0 +1,47 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CheckScannerService19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Check Scanner for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface CheckScannerService19
+  extends CheckScannerService18
+{
+  // Capabilities
+  public boolean getCapAutoContrast() throws JposException;
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapContrast() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Properties
+  public int     getContrast() throws JposException;
+  public void    setContrast(int contrast) throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinAcceptorService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinAcceptorService111.java
new file mode 100644
index 0000000..3d9b5bb
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinAcceptorService111.java
@@ -0,0 +1,91 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinAcceptorService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Acceptor for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface CoinAcceptorService111
+  extends BaseService, JposServiceInstance
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapDiscrepancy() throws JposException;
+  public boolean getCapFullSensor() throws JposException;
+  public boolean getCapJamSensor() throws JposException;
+  public boolean getCapNearFullSensor() throws JposException;
+  public boolean getCapPauseDeposit() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public boolean getCapRealTimeData() throws JposException;
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Properties
+  public String  getCurrencyCode() throws JposException;
+  public void    setCurrencyCode(String currencyCode) throws JposException;
+  public int     getDataCount() throws JposException;
+  public boolean getDataEventEnabled() throws JposException;
+  public void    setDataEventEnabled(boolean dataEventEnabled)
+                     throws JposException;
+  public int     getDepositAmount() throws JposException;
+  public String  getDepositCashList() throws JposException;
+  public String  getDepositCodeList() throws JposException;
+  public String  getDepositCounts() throws JposException;
+  public int     getDepositStatus() throws JposException;
+  public int     getFullStatus() throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+  public boolean getRealTimeDataEnabled() throws JposException;
+  public void    setRealTimeDataEnabled(boolean bEnabled) throws JposException;
+
+  // Methods
+  public void    adjustCashCounts(String cashCounts)
+                     throws JposException;
+  public void    beginDeposit()
+                     throws JposException;
+  public void    clearInput()  throws JposException;
+  public void    compareFirmwareVersion(String firmwareFileName,
+                                        int[] result)
+                     throws JposException;
+  public void    endDeposit(int success)
+                     throws JposException;
+  public void    fixDeposit()
+                     throws JposException;
+  public void    pauseDeposit(int control)
+                     throws JposException;
+  public void    readCashCounts(String[] cashCounts,
+                                boolean[] discrepancy)
+                     throws JposException;
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinAcceptorService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinAcceptorService112.java
new file mode 100644
index 0000000..b3956a7
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinAcceptorService112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinAcceptorService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Acceptor for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CoinAcceptorService112 extends CoinAcceptorService111
+{
+  // Nothing new added for release 1.12
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinAcceptorService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinAcceptorService113.java
new file mode 100644
index 0000000..798c7f7
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinAcceptorService113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinAcceptorService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Acceptor for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CoinAcceptorService113 extends CoinAcceptorService112
+{
+  // Nothing new added for release 1.13
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinAcceptorService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinAcceptorService114.java
new file mode 100644
index 0000000..4862262
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinAcceptorService114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinAcceptorService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Coin Acceptor for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CoinAcceptorService114 extends CoinAcceptorService113
+{
+  // Nothing new added for release 1.14
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService110.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService110.java
new file mode 100644
index 0000000..6e2284c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService110.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserService110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Dispenser for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CoinDispenserService110
+  extends CoinDispenserService19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService111.java
new file mode 100644
index 0000000..b481b1f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService111.java
@@ -0,0 +1,35 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Dispenser for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CoinDispenserService111 extends CoinDispenserService110
+{
+  // Methods
+  public void    adjustCashCounts(String cashCounts)
+                     throws JposException;
+  public void    readCashCounts(String[] cashCounts,
+                                boolean[] discrepancy)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService112.java
new file mode 100644
index 0000000..2c50aa8
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService112.java
@@ -0,0 +1,30 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Dispenser for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CoinDispenserService112 extends CoinDispenserService111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService113.java
new file mode 100644
index 0000000..b307186
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService113.java
@@ -0,0 +1,30 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Dispenser for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CoinDispenserService113 extends CoinDispenserService112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService114.java
new file mode 100644
index 0000000..f343417
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService114.java
@@ -0,0 +1,30 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Coin Dispenser for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CoinDispenserService114 extends CoinDispenserService113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService12.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService12.java
new file mode 100644
index 0000000..49a2d07
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService12.java
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserService12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to Coin Dispenser for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CoinDispenserService12 extends BaseService
+{
+    // Capabilities
+    public boolean getCapEmptySensor() throws JposException;
+    public boolean getCapJamSensor() throws JposException;
+    public boolean getCapNearEmptySensor() throws JposException;
+
+    // Properties
+    public int     getDispenserStatus() throws JposException;
+
+    // Methods
+    public void    dispenseChange(int amount) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService13.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService13.java
new file mode 100644
index 0000000..80f0545
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService13.java
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserService13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Dispenser for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CoinDispenserService13 extends CoinDispenserService12
+{
+    // Capabilities
+    public int     getCapPowerReporting() throws JposException;
+
+    // Properties
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService14.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService14.java
new file mode 100644
index 0000000..6cfe4be
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserService14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Dispenser for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CoinDispenserService14 extends CoinDispenserService13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService15.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService15.java
new file mode 100644
index 0000000..78261ca
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService15.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserService15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Dispenser for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2000-Apr-17 JavaPOS Release 1.5                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface CoinDispenserService15
+  extends CoinDispenserService14, JposServiceInstance
+{
+  // Nothing new added for release 1.5
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService16.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService16.java
new file mode 100644
index 0000000..e32dc39
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService16.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserService16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Dispenser for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2001-Apr-18 JavaPOS Release 1.6                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CoinDispenserService16
+  extends CoinDispenserService15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService17.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService17.java
new file mode 100644
index 0000000..742f1c6
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService17.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserService17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Dispenser for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                               BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CoinDispenserService17
+  extends CoinDispenserService16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService18.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService18.java
new file mode 100644
index 0000000..a500093
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService18.java
@@ -0,0 +1,42 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserService18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Dispenser for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 03-Jun-2003 JavaPOS Release 1.8                               BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CoinDispenserService18
+  extends CoinDispenserService17
+{
+	// Capabilities
+	public boolean getCapStatisticsReporting() throws JposException;
+	public boolean getCapUpdateStatistics() throws JposException;
+
+	// Methods
+	public void    resetStatistics(String statisticsBuffer)
+										 throws JposException;
+	public void    retrieveStatistics(String[] statisticsBuffer)
+										 throws JposException;
+	public void    updateStatistics(String statisticsBuffer)
+										 throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService19.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService19.java
new file mode 100644
index 0000000..8d70d1f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/CoinDispenserService19.java
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// CoinDispenserService19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Coin Dispenser for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface CoinDispenserService19
+  extends CoinDispenserService18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ElectronicJournalService110.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ElectronicJournalService110.java
new file mode 100644
index 0000000..cf23a61
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ElectronicJournalService110.java
@@ -0,0 +1,138 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ElectronicJournalService110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Electronic Journal for release
+//   1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface ElectronicJournalService110
+  extends BaseService, JposServiceInstance
+{
+  // Capabilities
+  public boolean getCapAddMarker() throws JposException;
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapErasableMedium() throws JposException;
+  public boolean getCapInitializeMedium() throws JposException;
+  public boolean getCapMediumIsAvailable() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public boolean getCapPrintContent() throws JposException;
+  public boolean getCapPrintContentFile() throws JposException;
+  public boolean getCapRetrieveCurrentMarker() throws JposException;
+  public boolean getCapRetrieveMarker() throws JposException;
+  public boolean getCapRetrieveMarkerByDateTime() throws JposException;
+  public boolean getCapRetrieveMarkersDateTime() throws JposException;
+  public int     getCapStation() throws JposException;
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapStorageEnabled() throws JposException;
+  public boolean getCapSuspendPrintContent() throws JposException;
+  public boolean getCapSuspendQueryContent() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+  public boolean getCapWaterMark() throws JposException;
+
+  // Properties
+  public boolean getAsyncMode() throws JposException;
+  public void    setAsyncMode(boolean asyncMode) throws JposException;
+  public boolean getAutoDisable() throws JposException;
+  public void    setAutoDisable(boolean autoDisable) throws JposException;
+  public int     getDataCount() throws JposException;
+  public boolean getDataEventEnabled() throws JposException;
+  public void    setDataEventEnabled(boolean dataEventEnabled)
+                     throws JposException;
+  public boolean getFlagWhenIdle() throws JposException;
+  public void    setFlagWhenIdle(boolean flagWhenIdle) throws JposException;
+  public long    getMediumFreeSpace() throws JposException;
+  public String  getMediumID() throws JposException;
+  public boolean getMediumIsAvailable() throws JposException;
+  public long    getMediumSize() throws JposException;
+  public int     getOutputID() throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+  public int     getStation() throws JposException;
+  public void    setStation(int station) throws JposException;
+  public boolean getStorageEnabled() throws JposException;
+  public void    setStorageEnabled(boolean enabled) throws JposException;
+  public boolean getSuspended() throws JposException;
+  public boolean getWaterMark() throws JposException;
+  public void    setWaterMark(boolean waterMark) throws JposException;
+
+  // Methods
+  public void    addMarker(String marker)
+                     throws JposException;
+  public void    cancelPrintContent()
+                     throws JposException;
+  public void    cancelQueryContent()
+                     throws JposException;
+  public void    clearInput() throws JposException;
+  public void    clearOutput() throws JposException;
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    eraseMedium()
+                     throws JposException;
+  public void    initializeMedium(String mediumID)
+                     throws JposException;
+  public void    printContent(String fromMarker,
+                              String toMarker)
+                     throws JposException;
+  public void    printContentFile(String fileName)
+                     throws JposException;
+  public void    queryContent(String fileName,
+                              String fromMarker,
+                              String toMarker)
+                     throws JposException;
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    resumePrintContent()
+                     throws JposException;
+  public void    resumeQueryContent()
+                     throws JposException;
+  public void    retrieveCurrentMarker(int markerType,
+                                       String[] marker)
+                     throws JposException;
+  public void    retrieveMarker(int markerType,
+                                int sessionNumber,
+                                int documentNumber,
+                                String[] marker)
+                     throws JposException;
+  public void    retrieveMarkerByDateTime(int markerType,
+                                          String dateTime,
+                                          String markerNumber,
+                                          String[] marker)
+                     throws JposException;
+  public void    retrieveMarkersDateTime(String marker,
+                                         String[] dateTime)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    suspendPrintContent()
+                     throws JposException;
+  public void    suspendQueryContent()
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ElectronicJournalService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ElectronicJournalService111.java
new file mode 100644
index 0000000..1d9b500
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ElectronicJournalService111.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ElectronicJournalService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Electronic Journal for release
+//   1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ElectronicJournalService111 extends ElectronicJournalService110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ElectronicJournalService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ElectronicJournalService112.java
new file mode 100644
index 0000000..348e99c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ElectronicJournalService112.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ElectronicJournalService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Electronic Journal for release
+//   1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ElectronicJournalService112 extends ElectronicJournalService111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ElectronicJournalService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ElectronicJournalService113.java
new file mode 100644
index 0000000..ed7efce
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ElectronicJournalService113.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ElectronicJournalService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Electronic Journal for release
+//   1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ElectronicJournalService113 extends ElectronicJournalService112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ElectronicJournalService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ElectronicJournalService114.java
new file mode 100644
index 0000000..0df4c50
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ElectronicJournalService114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ElectronicJournalService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Electronic Journal for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ElectronicJournalService114 extends ElectronicJournalService113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ElectronicValueRWService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ElectronicValueRWService112.java
new file mode 100644
index 0000000..b07ae31
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ElectronicValueRWService112.java
@@ -0,0 +1,166 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ElectronicValueRWService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Electronic Value RW for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface ElectronicValueRWService112
+  extends BaseService, JposServiceInstance
+{
+  // Capabilities
+  public boolean getCapActivateService() throws JposException;
+  public boolean getCapAddValue() throws JposException;
+  public boolean getCapCancelValue() throws JposException;
+  public int     getCapCardSensor() throws JposException;
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public int     getCapDetectionControl() throws JposException;
+  public boolean getCapElectronicMoney() throws JposException;
+  public boolean getCapEnumerateCardServices() throws JposException;
+  public boolean getCapIndirectTransactionLog() throws JposException;
+  public boolean getCapLockTerminal() throws JposException;
+  public boolean getCapLogStatus() throws JposException;
+  public boolean getCapMediumID() throws JposException;
+  public boolean getCapPoint() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public boolean getCapRealTimeData() throws JposException;
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapSubtractValue() throws JposException;
+  public boolean getCapTransaction() throws JposException;
+  public boolean getCapTransactionLog() throws JposException;
+  public boolean getCapUnlockTerminal() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+  public boolean getCapUpdateKey() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+  public boolean getCapVoucher() throws JposException;
+  public boolean getCapWriteValue() throws JposException;
+
+  // Properties
+  public String  getAccountNumber() throws JposException;
+  public String  getAdditionalSecurityInformation() throws JposException;
+  public void    setAdditionalSecurityInformation(String addSecInfo) throws JposException;
+  public long    getAmount() throws JposException;
+  public void    setAmount(long amount) throws JposException;
+  public String  getApprovalCode() throws JposException;
+  public void    setApprovalCode(String approvalCode) throws JposException;
+  public boolean getAsyncMode() throws JposException;
+  public void    setAsyncMode(boolean asyncMode) throws JposException;
+  public boolean getAutoDisable() throws JposException;
+  public void    setAutoDisable(boolean autoDisable) throws JposException;
+  public long    getBalance() throws JposException;
+  public long    getBalanceOfPoint() throws JposException;
+  public String  getCardServiceList() throws JposException;
+  public String  getCurrentService() throws JposException;
+  public void    setCurrentService(String currentService) throws JposException;
+  public int     getDataCount() throws JposException;
+  public boolean getDataEventEnabled() throws JposException;
+  public void    setDataEventEnabled(boolean dataEventEnabled)
+                     throws JposException;
+  public boolean getDetectionControl() throws JposException;
+  public void    setDetectionControl(boolean detectionControl) throws JposException;
+  public int     getDetectionStatus() throws JposException;
+  public String  getExpirationDate() throws JposException;
+  public String  getLastUsedDate() throws JposException;
+  public int     getLogStatus() throws JposException;
+  public String  getMediumID() throws JposException;
+  public void    setMediumID(String mediumID) throws JposException;
+  public int     getOutputID() throws JposException;
+  public long    getPoint() throws JposException;
+  public void    setPoint(long point) throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+  public String  getReaderWriterServiceList() throws JposException;
+  public int     getSequenceNumber() throws JposException;
+  public long    getSettledAmount() throws JposException;
+  public long    getSettledPoint() throws JposException;
+  public String  getTransactionLog() throws JposException;
+  public String  getVoucherID() throws JposException;
+  public void    setVoucherID(String voucherID) throws JposException;
+  public String  getVoucherIDList() throws JposException;
+  public void    setVoucherIDList(String voucherIDList) throws JposException;
+
+  // Methods
+  public void    accessLog(int sequenceNumber,
+                           int type,
+                           int timeout)
+                     throws JposException;
+  public void    activateService(int[] data,
+                                 Object[] obj)
+                     throws JposException;
+  public void    addValue(int sequenceNumber, int timeout)
+                     throws JposException;
+  public void    beginDetection(int type,
+                                int timeout)
+                     throws JposException;
+  public void    beginRemoval(int timeout)
+                     throws JposException;
+  public void    cancelValue(int sequenceNumber,
+                             int timeout)
+                     throws JposException;
+  public void    captureCard()
+                     throws JposException;
+  public void    clearInput()
+                     throws JposException;
+  public void    clearInputProperties()
+                     throws JposException;
+  public void    clearOutput()
+                     throws JposException;
+  public void    compareFirmwareVersion(String firmwareFileName,
+                                        int[] result)
+                     throws JposException;
+  public void    endDetection()
+                     throws JposException;
+  public void    endRemoval()
+                     throws JposException;
+  public void    enumerateCardServices()
+                     throws JposException;
+  public void    lockTerminal()
+                     throws JposException;
+  public void    readValue(int sequenceNumber,
+                           int timeout)
+                     throws JposException;
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    subtractValue(int sequenceNumber,
+                               int timeout)
+                     throws JposException;
+  public void    transactionAccess(int control)
+                     throws JposException;
+  public void    unlockTerminal()
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+  public void    updateKey(int[] data,
+                           Object[] obj)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    writeValue(int sequenceNumber,
+                            int timeout)
+                     throws JposException;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ElectronicValueRWService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ElectronicValueRWService113.java
new file mode 100644
index 0000000..2ba993b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ElectronicValueRWService113.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ElectronicValueRWService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Electronic Value RW for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface ElectronicValueRWService113 extends ElectronicValueRWService112
+{
+  // Nothing new added for release 1.13
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ElectronicValueRWService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ElectronicValueRWService114.java
new file mode 100644
index 0000000..9c799e0
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ElectronicValueRWService114.java
@@ -0,0 +1,48 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ElectronicValueRWService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Electronic Value RW for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface ElectronicValueRWService114 extends ElectronicValueRWService113
+{
+  // Capabilities
+  public boolean getCapPINDevice() throws JposException;
+  public boolean CapTrainingMode() throws JposException;
+
+  // Properties
+  public int     getPINEntry() throws JposException;
+  public void    setPINEntry(int pinEntry) throws JposException;
+  public int     getTrainingModeState() throws JposException;
+  public void    setTrainingModeState(int trainingModeState) throws JposException;
+
+  // Methods
+  public void    clearParameterInformation() throws JposException;
+  public void    queryLastSuccessfulTransactionResult() throws JposException;
+  public void    retrieveResultInformation(String   name,
+                                           String[] value) throws JposException;
+  public void    setParameterInformation(String name,
+                                         String value) throws JposException;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/EventCallbacks.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/EventCallbacks.java
new file mode 100644
index 0000000..6c412eb
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/EventCallbacks.java
@@ -0,0 +1,38 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// EventCallbacks
+//
+//   Interface definining callback methods in a JavaPOS device
+//   control that are callable by a JavaPOS device service.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.events.*;
+
+public interface EventCallbacks
+{
+    public void fireDataEvent(DataEvent e);
+    public void fireDirectIOEvent(DirectIOEvent e);
+    public void fireErrorEvent(ErrorEvent e);
+    public void fireOutputCompleteEvent(OutputCompleteEvent e);
+    public void fireStatusUpdateEvent(StatusUpdateEvent e);
+
+    public BaseControl getEventSource();
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService110.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService110.java
new file mode 100644
index 0000000..6d69d02
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService110.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// FiscalPrinterService110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Fiscal Printer for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface FiscalPrinterService110
+  extends FiscalPrinterService19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService111.java
new file mode 100644
index 0000000..0a49753
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService111.java
@@ -0,0 +1,46 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// FiscalPrinterService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Fiscal Printer for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface FiscalPrinterService111 extends FiscalPrinterService110
+{
+  // Capabilities
+  public boolean getCapPositiveSubtotalAdjustment() throws JposException;
+
+  // Methods
+  public void    printRecItemVoid(String description,
+                                  long price,
+                                  int quantity,
+                                  int vatInfo,
+                                  long unitPrice,
+                                  String unitName)
+                     throws JposException;
+  public void    printRecItemAdjustmentVoid(int adjustmentType,
+                                            String description,
+                                            long amount,
+                                            int vatInfo)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService112.java
new file mode 100644
index 0000000..fcc7365
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService112.java
@@ -0,0 +1,45 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// FiscalPrinterService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Fiscal Printer for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface FiscalPrinterService112 extends FiscalPrinterService111
+{
+  // Methods
+  public void    printRecItemRefund(String description,
+                                    long amount,
+                                    int quantity,
+                                    int vatInfo,
+                                    long unitAmount,
+                                    String unitName)
+                     throws JposException;
+  public void    printRecItemRefundVoid(String description,
+                                        long amount,
+                                        int quantity,
+                                        int vatInfo,
+                                        long unitAmount,
+                                        String unitName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService113.java
new file mode 100644
index 0000000..b243dc0
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// FiscalPrinterService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Fiscal Printer for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface FiscalPrinterService113 extends FiscalPrinterService112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService114.java
new file mode 100644
index 0000000..036c453
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// FiscalPrinterService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Fiscal Printer for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface FiscalPrinterService114 extends FiscalPrinterService113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService13.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService13.java
new file mode 100644
index 0000000..56b7abb
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService13.java
@@ -0,0 +1,195 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// FiscalPrinterService13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Fiscal Printer for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface FiscalPrinterService13 extends BaseService
+{
+    // Capabilities
+    public boolean getCapAdditionalLines() throws JposException;
+    public boolean getCapAmountAdjustment() throws JposException;
+    public boolean getCapAmountNotPaid() throws JposException;
+    public boolean getCapCheckTotal() throws JposException;
+    public boolean getCapCoverSensor() throws JposException;
+    public boolean getCapDoubleWidth() throws JposException;
+    public boolean getCapDuplicateReceipt() throws JposException;
+    public void    setDuplicateReceipt(boolean duplicateReceipt) throws JposException;
+    public boolean getCapFixedOutput() throws JposException;
+    public boolean getCapHasVatTable() throws JposException;
+    public boolean getCapIndependentHeader() throws JposException;
+    public boolean getCapItemList() throws JposException;
+    public boolean getCapJrnEmptySensor() throws JposException;
+    public boolean getCapJrnNearEndSensor() throws JposException;
+    public boolean getCapJrnPresent() throws JposException;
+    public boolean getCapNonFiscalMode() throws JposException;
+    public boolean getCapOrderAdjustmentFirst() throws JposException;
+    public boolean getCapPercentAdjustment() throws JposException;
+    public boolean getCapPositiveAdjustment() throws JposException;
+    public boolean getCapPowerLossReport() throws JposException;
+    public int     getCapPowerReporting() throws JposException;
+    public boolean getCapPredefinedPaymentLines() throws JposException;
+    public boolean getCapReceiptNotPaid() throws JposException;
+    public boolean getCapRecEmptySensor() throws JposException;
+    public boolean getCapRecNearEndSensor() throws JposException;
+    public boolean getCapRecPresent() throws JposException;
+    public boolean getCapRemainingFiscalMemory() throws JposException;
+    public boolean getCapReservedWord() throws JposException;
+    public boolean getCapSetHeader() throws JposException;
+    public boolean getCapSetPOSID() throws JposException;
+    public boolean getCapSetStoreFiscalID() throws JposException;
+    public boolean getCapSetTrailer() throws JposException;
+    public boolean getCapSetVatTable() throws JposException;
+    public boolean getCapSlpEmptySensor() throws JposException;
+    public boolean getCapSlpFiscalDocument() throws JposException;
+    public boolean getCapSlpFullSlip() throws JposException;
+    public boolean getCapSlpNearEndSensor() throws JposException;
+    public boolean getCapSlpPresent() throws JposException;
+    public boolean getCapSlpValidation() throws JposException;
+    public boolean getCapSubAmountAdjustment() throws JposException;
+    public boolean getCapSubPercentAdjustment() throws JposException;
+    public boolean getCapSubtotal() throws JposException;
+    public boolean getCapTrainingMode() throws JposException;
+    public boolean getCapValidateJournal() throws JposException;
+    public boolean getCapXReport() throws JposException;
+
+    // Properties
+    public int     getOutputID() throws JposException;
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+
+    public int     getAmountDecimalPlace() throws JposException;
+    public boolean getAsyncMode() throws JposException;
+    public void    setAsyncMode(boolean asyncMode) throws JposException;
+    public boolean getCheckTotal() throws JposException;
+    public void    setCheckTotal(boolean checkTotal) throws JposException;
+    public int     getCountryCode() throws JposException;
+    public boolean getCoverOpen() throws JposException;
+    public boolean getDayOpened() throws JposException;
+    public int     getDescriptionLength() throws JposException;
+    public boolean getDuplicateReceipt() throws JposException;
+    public int     getErrorLevel() throws JposException;
+    public int     getErrorOutID() throws JposException;
+    public int     getErrorState() throws JposException;
+    public int     getErrorStation() throws JposException;
+    public String  getErrorString() throws JposException;
+    public boolean getFlagWhenIdle() throws JposException;
+    public void    setFlagWhenIdle(boolean flagWhenIdle) throws JposException;
+    public boolean getJrnEmpty() throws JposException;
+    public boolean getJrnNearEnd() throws JposException;
+    public int     getMessageLength() throws JposException;
+    public int     getNumHeaderLines() throws JposException;
+    public int     getNumTrailerLines() throws JposException;
+    public int     getNumVatRates() throws JposException;
+    public String  getPredefinedPaymentLines() throws JposException;
+    public int     getPrinterState() throws JposException;
+    public int     getQuantityDecimalPlaces() throws JposException;
+    public int     getQuantityLength() throws JposException;
+    public boolean getRecEmpty() throws JposException;
+    public boolean getRecNearEnd() throws JposException;
+    public int     getRemainingFiscalMemory() throws JposException;
+    public String  getReservedWord() throws JposException;
+    public boolean getSlpEmpty() throws JposException;
+    public boolean getSlpNearEnd() throws JposException;
+    public int     getSlipSelection() throws JposException;
+    public void    setSlipSelection(int slipSelection) throws JposException;
+    public boolean getTrainingModeActive() throws JposException;
+
+    // Methods
+    public void    beginFiscalDocument(int documentAmount)
+                       throws JposException;
+    public void    beginFiscalReceipt(boolean printHeader)
+                       throws JposException;
+    public void    beginFixedOutput(int station, int documentType)
+                       throws JposException;
+    public void    beginInsertion(int timeout) throws JposException;
+    public void    beginItemList(int vatID) throws JposException;
+    public void    beginNonFiscal() throws JposException;
+    public void    beginRemoval(int timeout) throws JposException;
+    public void    beginTraining() throws JposException;
+    public void    clearError() throws JposException;
+    public void    clearOutput() throws JposException;
+    public void    endFiscalDocument() throws JposException;
+    public void    endFiscalReceipt(boolean printHeader) throws JposException;
+    public void    endFixedOutput() throws JposException;
+    public void    endInsertion() throws JposException;
+    public void    endItemList() throws JposException;
+    public void    endNonFiscal() throws JposException;
+    public void    endRemoval() throws JposException;
+    public void    endTraining() throws JposException;
+    public void    getData(int dataItem, int[] optArgs, String[] data)
+                       throws JposException;
+    public void    getDate(String[] Date) throws JposException;
+    public void    getTotalizer(int vatID, int optArgs, String[] data)
+                       throws JposException;
+    public void    getVatEntry(int vatID, int optArgs, int[] vatRate)
+                       throws JposException;
+    public void    printDuplicateReceipt() throws JposException;
+    public void    printFiscalDocumentLine(String documentLine)
+                       throws JposException;
+    public void    printFixedOutput(int documentType, int lineNumber,
+                       String data) throws JposException;
+    public void    printNormal(int station, String data) throws JposException;
+    public void    printPeriodicTotalsReport(String date1, String date2)
+                       throws JposException;
+    public void    printPowerLossReport() throws JposException;
+    public void    printRecItem(String description, long price, int quantity,
+                       int vatInfo, long unitPrice, String unitName)
+                       throws JposException;
+    public void    printRecItemAdjustment(int adjustmentType,
+                       String description, long amount, int vatInfo)
+                       throws JposException;
+    public void    printRecMessage(String message) throws JposException;
+    public void    printRecNotPaid(String description, long amount)
+                       throws JposException;
+    public void    printRecRefund(String description, long amount, int vatInfo)
+                       throws JposException;
+    public void    printRecSubtotal(long amount) throws JposException;
+    public void    printRecSubtotalAdjustment(int adjustmentType,
+                       String description, long amount) throws JposException;
+    public void    printRecTotal(long total, long payment, String description)
+                       throws JposException;
+    public void    printRecVoid(String description) throws JposException;
+    public void    printRecVoidItem(String description, long amount,
+                       int quantity, int adjustmentType, long adjustment,
+                       int vatInfo) throws JposException;
+    public void    printReport(int reportType, String startNum, String endNum)
+                       throws JposException;
+    public void    printXReport() throws JposException;
+    public void    printZReport() throws JposException;
+    public void    resetPrinter() throws JposException;
+    public void    setDate(String date) throws JposException;
+    public void    setHeaderLine(int lineNumber, String text,
+                       boolean doubleWidth) throws JposException;
+    public void    setPOSID(String POSID, String cashierID)
+                       throws JposException;
+    public void    setStoreFiscalID(String ID) throws JposException;
+    public void    setTrailerLine(int lineNumber, String text,
+                       boolean doubleWidth) throws JposException;
+    public void    setVatTable() throws JposException;
+    public void    setVatValue(int vatID, String vatValue)
+                       throws JposException;
+    public void    verifyItem(String itemName, int vatID) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService14.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService14.java
new file mode 100644
index 0000000..f8d27f2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// FiscalPrinterService14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Fiscal Printer for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface FiscalPrinterService14 extends FiscalPrinterService13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService15.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService15.java
new file mode 100644
index 0000000..daae22d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService15.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// FiscalPrinterService15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Fiscal Printer for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2000-Apr-17 JavaPOS Release 1.5                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface FiscalPrinterService15
+  extends FiscalPrinterService14, JposServiceInstance
+{
+  // Nothing new added for release 1.5
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService16.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService16.java
new file mode 100644
index 0000000..833fdb5
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService16.java
@@ -0,0 +1,93 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// FiscalPrinterService16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Fiscal Printer for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2001-Apr-18 JavaPOS Release 1.6                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface FiscalPrinterService16
+  extends FiscalPrinterService15
+{
+    // Capabilities
+    public boolean getCapAdditionalHeader() throws JposException;
+    public boolean getCapAdditionalTrailer() throws JposException;
+    public boolean getCapChangeDue() throws JposException;
+    public boolean getCapEmptyReceiptIsVoidable() throws JposException;
+    public boolean getCapFiscalReceiptStation() throws JposException;
+    public boolean getCapFiscalReceiptType() throws JposException;
+    public boolean getCapMultiContractor() throws JposException;
+    public boolean getCapOnlyVoidLastItem() throws JposException;
+    public boolean getCapPackageAdjustment() throws JposException;
+    public boolean getCapPostPreLine() throws JposException;
+    public boolean getCapSetCurrency() throws JposException;
+    public boolean getCapTotalizerType() throws JposException;
+
+    // Properties
+    public int     getActualCurrency() throws JposException;
+    public String  getAdditionalHeader() throws JposException;
+    public void    setAdditionalHeader(String additionalHeader)
+                       throws JposException;
+    public String  getAdditionalTrailer() throws JposException;
+    public void    setAdditionalTrailer(String additionalTrailer)
+                       throws JposException;
+    public String  getChangeDue() throws JposException;
+    public void    setChangeDue(String changeDue) throws JposException;
+    public int     getContractorId() throws JposException;
+    public void    setContractorId(int contractorId) throws JposException;
+    public int     getDateType() throws JposException;
+    public void    setDateType(int dateType) throws JposException;
+    public int     getFiscalReceiptStation() throws JposException;
+    public void    setFiscalReceiptStation(int fiscalReceiptStation)
+                       throws JposException;
+    public int     getFiscalReceiptType() throws JposException;
+    public void    setFiscalReceiptType(int fiscalReceiptType)
+                       throws JposException;
+    public int     getMessageType() throws JposException;
+    public void    setMessageType(int messageType) throws JposException;
+    public String  getPostLine() throws JposException;
+    public void    setPostLine(String postLine) throws JposException;
+    public String  getPreLine() throws JposException;
+    public void    setPreLine(String preLine) throws JposException;
+    public int     getTotalizerType() throws JposException;
+    public void    setTotalizerType(int totalizerType) throws JposException;
+
+    // Methods
+    public void    setCurrency(int newCurrency) throws JposException;
+    public void    printRecCash(long amount) throws JposException;
+    public void    printRecItemFuel(String description, long price,
+                       int quantity, int vatInfo, long unitPrice,
+                       String unitName, long specialTax, String specialTaxName)
+                       throws JposException;
+    public void    printRecItemFuelVoid(String description, long price,
+                       int vatInfo, long specialTax) throws JposException;
+    public void    printRecPackageAdjustment(int adjustmentType,
+                       String description, String vatAdjustment)
+                       throws JposException;
+    public void    printRecPackageAdjustVoid(int adjustmentType,
+                       String vatAdjustment) throws JposException;
+    public void    printRecRefundVoid(String description, long amount,
+                       int vatInfo) throws JposException;
+    public void    printRecSubtotalAdjustVoid(int adjustmentType, long amount)
+                       throws JposException;
+    public void    printRecTaxID(String taxID) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService17.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService17.java
new file mode 100644
index 0000000..f20f2b9
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService17.java
@@ -0,0 +1,43 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// FiscalPrinterService17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Fiscal Printer for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+// 16-Apr-2003 Release 1.7.2: Added getAmountDecimalPlaces to      BS
+//               correct a spelling error present since release
+//               1.3.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface FiscalPrinterService17
+  extends FiscalPrinterService16
+{
+	// The AmountDecimalPlaces property was incorrectly spelled
+	// AmountDecimalPlace since version 1.3.  In version 1.7.2 and later,
+	// the correct spelling is supported. The old version is left for
+	// Application and Device Service compatibility. The implementations
+	// of getAmountDecimalPlaces and getAmountDecimalPlace should be
+	// identical.
+
+	// Properties
+	public int     getAmountDecimalPlaces() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService18.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService18.java
new file mode 100644
index 0000000..64f7f06
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService18.java
@@ -0,0 +1,45 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// FiscalPrinterService18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Fiscal Printer for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+// 16-Apr-2003 Release 1.8.2: Added getAmountDecimalPlaces to      BS
+//               correct a spelling error present since release
+//               1.3.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface FiscalPrinterService18
+  extends FiscalPrinterService17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService19.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService19.java
new file mode 100644
index 0000000..b326372
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/FiscalPrinterService19.java
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// FiscalPrinterService19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Fiscal Printer for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface FiscalPrinterService19
+  extends FiscalPrinterService18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/GateService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/GateService112.java
new file mode 100644
index 0000000..e4d6c88
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/GateService112.java
@@ -0,0 +1,64 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// GateService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Gate for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface GateService112
+  extends BaseService, JposServiceInstance
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapGateStatus() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public boolean getCapRealTimeData() throws JposException;
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Properties
+  public int     getGetStatus() throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName,
+                                        int[] result)
+                     throws JposException;
+  public void    openGate()
+                     throws JposException;
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    waitForGateClose(int timeout)
+                     throws JposException;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/GateService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/GateService113.java
new file mode 100644
index 0000000..e5d0600
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/GateService113.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// GateService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Gate for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface GateService113 extends GateService112
+{
+  // Nothing new added for release 1.13
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/GateService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/GateService114.java
new file mode 100644
index 0000000..a84fba1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/GateService114.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// GateService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Gate for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface GateService114 extends GateService113
+{
+  // Nothing new added for release 1.14
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService110.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService110.java
new file mode 100644
index 0000000..78c67e5
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService110.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsService110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Hard Totals for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface HardTotalsService110
+  extends HardTotalsService19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService111.java
new file mode 100644
index 0000000..ab92c79
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Hard Totals for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface HardTotalsService111 extends HardTotalsService110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService112.java
new file mode 100644
index 0000000..278a333
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Hard Totals for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface HardTotalsService112 extends HardTotalsService111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService113.java
new file mode 100644
index 0000000..5e5930a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Hard Totals for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface HardTotalsService113 extends HardTotalsService112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService114.java
new file mode 100644
index 0000000..0d7bf98
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Hard Totals for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface HardTotalsService114 extends HardTotalsService113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService12.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService12.java
new file mode 100644
index 0000000..d0ed7da
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService12.java
@@ -0,0 +1,65 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsService12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to Hard Totals for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface HardTotalsService12 extends BaseService
+{
+    // Capabilities
+    public boolean getCapErrorDetection() throws JposException;
+    public boolean getCapSingleFile() throws JposException;
+    public boolean getCapTransactions() throws JposException;
+
+    // Properties
+    public int     getFreeData() throws JposException;
+    public int     getNumberOfFiles() throws JposException;
+    public int     getTotalsSize() throws JposException;
+    public boolean getTransactionInProgress() throws JposException;
+
+    // Methods
+    public void    beginTrans() throws JposException;
+    public void    claimFile(int hTotalsFile, int timeout)
+                       throws JposException;
+    public void    commitTrans() throws JposException;
+    public void    create(String fileName, int[] hTotalsFile, int size,
+                       boolean errorDetection) throws JposException;
+    public void    delete(String fileName) throws JposException;
+    public void    find(String fileName, int[] hTotalsFile, int[] size)
+                       throws JposException;
+    public void    findByIndex(int index, String[] fileName)
+                       throws JposException;
+    public void    read(int hTotalsFile, byte[] data, int offset,
+                       int count) throws JposException;
+    public void    recalculateValidationData(int hTotalsFile)
+                       throws JposException;
+    public void    releaseFile(int hTotalsFile) throws JposException;
+    public void    rename(int hTotalsFile, String fileName)
+                       throws JposException;
+    public void    rollback() throws JposException;
+    public void    setAll(int hTotalsFile, byte value) throws JposException;
+    public void    validateData(int hTotalsFile) throws JposException;
+    public void    write(int hTotalsFile, byte[] data, int offset, int count)
+                       throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService13.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService13.java
new file mode 100644
index 0000000..0cc7b46
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService13.java
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsService13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Hard Totals for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface HardTotalsService13 extends HardTotalsService12
+{
+    // Capabilities
+    public int     getCapPowerReporting() throws JposException;
+
+    // Properties
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService14.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService14.java
new file mode 100644
index 0000000..c2b28dd
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsService14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Hard Totals for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface HardTotalsService14 extends HardTotalsService13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService15.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService15.java
new file mode 100644
index 0000000..c3cb016
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService15.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsService15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Hard Totals for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2000-Apr-17 JavaPOS Release 1.5                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface HardTotalsService15
+  extends HardTotalsService14, JposServiceInstance
+{
+  // Nothing new added for release 1.5
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService16.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService16.java
new file mode 100644
index 0000000..23edf34
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService16.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsService16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Hard Totals for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2001-Apr-18 JavaPOS Release 1.6                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface HardTotalsService16
+  extends HardTotalsService15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService17.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService17.java
new file mode 100644
index 0000000..4b7d0c6
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService17.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsService17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Hard Totals for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface HardTotalsService17
+  extends HardTotalsService16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService18.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService18.java
new file mode 100644
index 0000000..4233ae2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService18.java
@@ -0,0 +1,42 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsService18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Hard Totals for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface HardTotalsService18
+  extends HardTotalsService17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService19.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService19.java
new file mode 100644
index 0000000..3c13659
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/HardTotalsService19.java
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// HardTotalsService19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Hard Totals for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface HardTotalsService19
+  extends HardTotalsService18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ImageScannerService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ImageScannerService111.java
new file mode 100644
index 0000000..bbc1610
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ImageScannerService111.java
@@ -0,0 +1,98 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ImageScannerService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Image Scanner for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface ImageScannerService111
+  extends BaseService, JposServiceInstance
+{
+  // Capabilities
+  public boolean getCapAim() throws JposException;
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapDecodeData() throws JposException;
+  public boolean getCapHostTriggered() throws JposException;
+  public boolean getCapIlluminate() throws JposException;
+  public boolean getCapImageData() throws JposException;
+  public boolean getCapImageQuality() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+  public boolean getCapVideoData() throws JposException;
+
+
+  // Properties
+  public boolean getAimMode() throws JposException;
+  public void    setAimMode(boolean aimMode) throws JposException;
+  public boolean getAutoDisable() throws JposException;
+  public void    setAutoDisable(boolean autoDisable) throws JposException;
+  public int     getBitsPerPixel() throws JposException;
+  public int     getDataCount() throws JposException;
+  public boolean getDataEventEnabled() throws JposException;
+  public void    setDataEventEnabled(boolean dataEventEnabled)
+                     throws JposException;
+  public byte[]  getFrameData() throws JposException;
+  public int     getFrameType() throws JposException;
+  public boolean getIlluminateMode() throws JposException;
+  public void    setIlluminateMode(boolean illuminateMode) throws JposException;
+  public int     getImageHeight() throws JposException;
+  public int     getImageLength() throws JposException;
+  public int     getImageMode() throws JposException;
+  public void    setImageMode(int imageMode) throws JposException;
+  public int     getImageQuality() throws JposException;
+  public void    setImageQuality(int imageQuality) throws JposException;
+  public int     getImageType() throws JposException;
+  public int     getImageWidth() throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+  public int     getVideoCount() throws JposException;
+  public void    setVideoCount(int videoCount) throws JposException;
+  public int     getVideoRate() throws JposException;
+  public void    setVideoRate(int videoRate) throws JposException;
+
+  // Methods
+  public void    clearInput()
+                     throws JposException;
+  public void    clearInputProperties()
+                     throws JposException;
+  public void    compareFirmwareVersion(String firmwareFileName,
+                                        int[] result)
+                     throws JposException;
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    startSession()
+                     throws JposException;
+  public void    stopSession()
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ImageScannerService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ImageScannerService112.java
new file mode 100644
index 0000000..3cdfd0c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ImageScannerService112.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ImageScannerService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Image Scanner for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ImageScannerService112
+  extends ImageScannerService111
+{
+  // Nothing new added for release 1.12
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ImageScannerService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ImageScannerService113.java
new file mode 100644
index 0000000..3686d1f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ImageScannerService113.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ImageScannerService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Image Scanner for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ImageScannerService113
+  extends ImageScannerService112
+{
+  // Nothing new added for release 1.13
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ImageScannerService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ImageScannerService114.java
new file mode 100644
index 0000000..2a6febb
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ImageScannerService114.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ImageScannerService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Image Scanner for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ImageScannerService114
+  extends ImageScannerService113
+{
+  // Nothing new added for release 1.14
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ItemDispenserService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ItemDispenserService112.java
new file mode 100644
index 0000000..77234d4
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ItemDispenserService112.java
@@ -0,0 +1,72 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ItemDispenserService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Item Dispenser for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface ItemDispenserService112
+  extends BaseService, JposServiceInstance
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapEmptySensor() throws JposException;
+  public boolean getCapIndividualSlotStatus() throws JposException;
+  public boolean getCapJamSensor() throws JposException;
+  public boolean getCapNearEmptySensor() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Properties
+  public int     getDispenserStatus() throws JposException;
+  public int     getMaxSlots() throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+
+  // Methods
+  public void    adjustItemCount(int itemCount,
+                                 int slotNumber)
+                     throws JposException;
+  public void    compareFirmwareVersion(String firmwareFileName,
+                                        int[] result)
+                     throws JposException;
+  public void    dispenseItem(int[] numItem,
+                              int slotNumber)
+                     throws JposException;
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    readItemCount(int[] itemCount,
+                               int slotNumber)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ItemDispenserService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ItemDispenserService113.java
new file mode 100644
index 0000000..9fbc0ab
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ItemDispenserService113.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ItemDispenserService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Item Dispenser for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface ItemDispenserService113 extends ItemDispenserService112
+{
+  // Nothing new added for release 1.13
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ItemDispenserService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ItemDispenserService114.java
new file mode 100644
index 0000000..875daa1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ItemDispenserService114.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ItemDispenserService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Item Dispenser for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface ItemDispenserService114 extends ItemDispenserService113
+{
+  // Nothing new added for release 1.14
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService110.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService110.java
new file mode 100644
index 0000000..b2b9338
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService110.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockService110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Keylock for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface KeylockService110
+  extends KeylockService19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService111.java
new file mode 100644
index 0000000..150b1b0
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService111.java
@@ -0,0 +1,35 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Keylock for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface KeylockService111 extends KeylockService110
+{
+  // Capabilities
+  public int     getCapKeylockType() throws JposException;
+
+  // Properties
+  public byte[]  getElectronicKeyValue() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService112.java
new file mode 100644
index 0000000..54a2dec
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Keylock for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface KeylockService112 extends KeylockService111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService113.java
new file mode 100644
index 0000000..c814ad0
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Keylock for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface KeylockService113 extends KeylockService112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService114.java
new file mode 100644
index 0000000..12a6cb6
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Keylock for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface KeylockService114 extends KeylockService113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService12.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService12.java
new file mode 100644
index 0000000..348959f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService12.java
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockService12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to Keylock for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface KeylockService12 extends BaseService
+{
+    // Properties
+    public int     getKeyPosition() throws JposException;
+    public int     getPositionCount() throws JposException;
+
+    // Methods
+    public void    waitForKeylockChange(int keyPosition, int timeout)
+                       throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService13.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService13.java
new file mode 100644
index 0000000..053c952
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService13.java
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockService13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Keylock for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface KeylockService13 extends KeylockService12
+{
+    // Capabilities
+    public int     getCapPowerReporting() throws JposException;
+
+    // Properties
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService14.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService14.java
new file mode 100644
index 0000000..143b3ee
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockService14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Keylock for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface KeylockService14 extends KeylockService13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService15.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService15.java
new file mode 100644
index 0000000..1547418
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService15.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockService15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Keylock for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2000-Apr-17 JavaPOS Release 1.5                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface KeylockService15
+  extends KeylockService14, JposServiceInstance
+{
+  // Nothing new added for release 1.5
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService16.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService16.java
new file mode 100644
index 0000000..e4112a3
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService16.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockService16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Keylock for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2001-Apr-18 JavaPOS Release 1.6                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface KeylockService16
+  extends KeylockService15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService17.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService17.java
new file mode 100644
index 0000000..56a05dc
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService17.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockService17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Keylock for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface KeylockService17
+  extends KeylockService16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService18.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService18.java
new file mode 100644
index 0000000..8510d12
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService18.java
@@ -0,0 +1,42 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockService18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Keylock for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface KeylockService18
+  extends KeylockService17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService19.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService19.java
new file mode 100644
index 0000000..619e76f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/KeylockService19.java
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// KeylockService19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Keylock for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface KeylockService19
+  extends KeylockService18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/LightsService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/LightsService112.java
new file mode 100644
index 0000000..d1baef2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/LightsService112.java
@@ -0,0 +1,69 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LightsService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Lights for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface LightsService112
+  extends BaseService, JposServiceInstance
+{
+  // Capabilities
+  public int     getCapAlarm() throws JposException;
+  public boolean getCapBlink() throws JposException;
+  public int     getCapColor() throws JposException;
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Properties
+  public int     getMaxLights() throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName,
+                                        int[] result)
+                     throws JposException;
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    switchOff(int lightNumber)
+                     throws JposException;
+  public void    switchOn(int lightNumber,
+                          int blinkOnCycle,
+                          int blinkOffCycle,
+                          int color,
+                          int alarm)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/LightsService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/LightsService113.java
new file mode 100644
index 0000000..da36087
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/LightsService113.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LightsService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Lights for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface LightsService113 extends LightsService112
+{
+  // Nothing new added for release 1.13
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/LightsService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/LightsService114.java
new file mode 100644
index 0000000..bcd5c84
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/LightsService114.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LightsService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Lights for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface LightsService114 extends LightsService113
+{
+  // Nothing new added for release 1.14
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService110.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService110.java
new file mode 100644
index 0000000..d53abff
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService110.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayService110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Line Display for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface LineDisplayService110
+  extends LineDisplayService19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService111.java
new file mode 100644
index 0000000..04b6cef
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Line Display for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface LineDisplayService111 extends LineDisplayService110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService112.java
new file mode 100644
index 0000000..f615025
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Line Display for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface LineDisplayService112 extends LineDisplayService111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService113.java
new file mode 100644
index 0000000..6658495
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Line Display for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface LineDisplayService113 extends LineDisplayService112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService114.java
new file mode 100644
index 0000000..77c2a16
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Line Display for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface LineDisplayService114 extends LineDisplayService113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService12.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService12.java
new file mode 100644
index 0000000..d656680
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService12.java
@@ -0,0 +1,89 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayService12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to Line Display for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface LineDisplayService12 extends BaseService
+{
+    // Capabilities
+    public int     getCapBlink() throws JposException;
+    public boolean getCapBrightness() throws JposException;
+    public int     getCapCharacterSet() throws JposException;
+    public boolean getCapDescriptors() throws JposException;
+    public boolean getCapHMarquee() throws JposException;
+    public boolean getCapICharWait() throws JposException;
+    public boolean getCapVMarquee() throws JposException;
+
+    // Properties
+    public int     getCharacterSet() throws JposException;
+    public void    setCharacterSet(int characterSet) throws JposException;
+    public String  getCharacterSetList() throws JposException;
+    public int     getColumns() throws JposException;
+    public int     getCurrentWindow() throws JposException;
+    public void    setCurrentWindow(int currentWindow) throws JposException;
+    public int     getCursorColumn() throws JposException;
+    public void    setCursorColumn(int cursorColumn) throws JposException;
+    public int     getCursorRow() throws JposException;
+    public void    setCursorRow(int cursorRow) throws JposException;
+    public boolean getCursorUpdate() throws JposException;
+    public void    setCursorUpdate(boolean cursorUpdate) throws JposException;
+    public int     getDeviceBrightness() throws JposException;
+    public void    setDeviceBrightness(int deviceBrightness)
+                       throws JposException;
+    public int     getDeviceColumns() throws JposException;
+    public int     getDeviceDescriptors() throws JposException;
+    public int     getDeviceRows() throws JposException;
+    public int     getDeviceWindows() throws JposException;
+    public int     getInterCharacterWait() throws JposException;
+    public void    setInterCharacterWait(int interCharacterWait)
+                       throws JposException;
+    public int     getMarqueeFormat() throws JposException;
+    public void    setMarqueeFormat(int marqueeFormat) throws JposException;
+    public int     getMarqueeRepeatWait() throws JposException;
+    public void    setMarqueeRepeatWait(int marqueeRepeatWait)
+                       throws JposException;
+    public int     getMarqueeType() throws JposException;
+    public void    setMarqueeType(int marqueeType) throws JposException;
+    public int     getMarqueeUnitWait() throws JposException;
+    public void    setMarqueeUnitWait(int marqueeUnitWait)
+                       throws JposException;
+    public int     getRows() throws JposException;
+
+    // Methods
+    public void    clearDescriptors() throws JposException;
+    public void    clearText() throws JposException;
+    public void    createWindow(int viewportRow, int viewportColumn,
+                       int viewportHeight, int viewportWidth, int windowHeight,
+                       int windowWidth) throws JposException;
+    public void    destroyWindow() throws JposException;
+    public void    displayText(String data, int attribute)
+                       throws JposException;
+    public void    displayTextAt(int row, int column, String data,
+                       int attribute) throws JposException;
+    public void    refreshWindow(int window) throws JposException;
+    public void    scrollText(int direction, int units) throws JposException;
+    public void    setDescriptor(int descriptor, int attribute)
+                       throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService13.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService13.java
new file mode 100644
index 0000000..9eca6d2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService13.java
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayService13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Line Display for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface LineDisplayService13 extends LineDisplayService12
+{
+    // Capabilities
+    public int     getCapPowerReporting() throws JposException;
+
+    // Properties
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService14.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService14.java
new file mode 100644
index 0000000..bb50291
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayService14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Line Display for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface LineDisplayService14 extends LineDisplayService13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService15.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService15.java
new file mode 100644
index 0000000..d909671
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService15.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayService15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Line Display for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2000-Apr-17 JavaPOS Release 1.5                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface LineDisplayService15
+  extends LineDisplayService14, JposServiceInstance
+{
+  // Nothing new added for release 1.5
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService16.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService16.java
new file mode 100644
index 0000000..46db5d9
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService16.java
@@ -0,0 +1,51 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayService16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Line Display for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2001-Apr-18 JavaPOS Release 1.6                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface LineDisplayService16
+  extends LineDisplayService15
+{
+    // Capabilities
+    public boolean getCapBlinkRate() throws JposException;
+    public int     getCapCursorType() throws JposException;
+    public boolean getCapCustomGlyph() throws JposException;
+    public int     getCapReadBack() throws JposException;
+    public int     getCapReverse() throws JposException;
+
+    // Properties
+    public int     getBlinkRate() throws JposException;
+    public void    setBlinkRate(int blinkRate) throws JposException;
+    public int     getCursorType() throws JposException;
+    public void    setCursorType(int cursorType) throws JposException;
+    public String  getCustomGlyphList() throws JposException;
+    public int     getGlyphHeight() throws JposException;
+    public int     getGlyphWidth() throws JposException;
+
+    // Methods
+    public void    defineGlyph(int glyphCode, byte[] glyph)
+                       throws JposException;
+    public void    readCharacterAtCursor(int[] aChar) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService17.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService17.java
new file mode 100644
index 0000000..eef6b8b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService17.java
@@ -0,0 +1,51 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayService17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Line Display for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface LineDisplayService17
+  extends LineDisplayService16
+{
+  // Capabilities
+  public boolean getCapBitmap() throws JposException;
+  public boolean getCapScreenMode() throws JposException;
+  public boolean getCapMapCharacterSet() throws JposException;
+
+  // Properties
+  public boolean getMapCharacterSet() throws JposException;
+  public void    setMapCharacterSet(boolean mapCharacterSet)
+                   throws JposException;
+  public int     getMaximumX() throws JposException;
+  public int     getMaximumY() throws JposException;
+  public int     getScreenMode() throws JposException;
+  public void    setScreenMode(int screenMode) throws JposException;
+  public String  getScreenModeList() throws JposException;
+
+  // Methods
+  public void    displayBitmap(String fileName, int width, int alignmentX,
+                               int alignmentY) throws JposException;
+  public void    setBitmap(int bitmapNumber, String fileName, int width,
+                           int alignmentX, int alignmentY) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService18.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService18.java
new file mode 100644
index 0000000..94cb995
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService18.java
@@ -0,0 +1,42 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayService18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Line Display for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface LineDisplayService18
+  extends LineDisplayService17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService19.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService19.java
new file mode 100644
index 0000000..4ee52bd
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/LineDisplayService19.java
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// LineDisplayService19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Line Display for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface LineDisplayService19
+  extends LineDisplayService18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService110.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService110.java
new file mode 100644
index 0000000..46f2b81
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService110.java
@@ -0,0 +1,34 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRService110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MICR for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MICRService110
+  extends MICRService19
+{
+  // Methods
+  public void    clearInputProperties()
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService111.java
new file mode 100644
index 0000000..4f2cd37
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MICR for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MICRService111 extends MICRService110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService112.java
new file mode 100644
index 0000000..10f737b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MICR for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MICRService112 extends MICRService111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService113.java
new file mode 100644
index 0000000..bf2ab17
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MICR for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MICRService113 extends MICRService112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService114.java
new file mode 100644
index 0000000..417003b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to MICR for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MICRService114 extends MICRService113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService12.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService12.java
new file mode 100644
index 0000000..947c569
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService12.java
@@ -0,0 +1,56 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRService12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to MICR for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MICRService12 extends BaseService
+{
+    // Capabilities
+    public boolean getCapValidationDevice() throws JposException;
+
+    // Properties
+    public boolean getAutoDisable() throws JposException;
+    public void    setAutoDisable(boolean autoDisable) throws JposException;
+    public String  getAccountNumber() throws JposException;
+    public String  getAmount() throws JposException;
+    public String  getBankNumber() throws JposException;
+    public int     getCheckType() throws JposException;
+    public int     getCountryCode() throws JposException;
+    public int     getDataCount() throws JposException;
+    public boolean getDataEventEnabled() throws JposException;
+    public void    setDataEventEnabled(boolean dataEventEnabled)
+                       throws JposException;
+    public String  getEPC() throws JposException;
+    public String  getRawData() throws JposException;
+    public String  getSerialNumber() throws JposException;
+    public String  getTransitNumber() throws JposException;
+
+    // Methods
+    public void    beginInsertion(int timeout) throws JposException;
+    public void    beginRemoval(int timeout) throws JposException;
+    public void    clearInput() throws JposException;
+    public void    endInsertion() throws JposException;
+    public void    endRemoval() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService13.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService13.java
new file mode 100644
index 0000000..9c7bb44
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService13.java
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRService13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MICR for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MICRService13 extends MICRService12
+{
+    // Capabilities
+    public int     getCapPowerReporting() throws JposException;
+
+    // Properties
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService14.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService14.java
new file mode 100644
index 0000000..eca7de2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRService14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MICR for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MICRService14 extends MICRService13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService15.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService15.java
new file mode 100644
index 0000000..70dfb9a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService15.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRService15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MICR for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2000-Apr-17 JavaPOS Release 1.5                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface MICRService15
+  extends MICRService14, JposServiceInstance
+{
+  // Nothing new added for release 1.5
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService16.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService16.java
new file mode 100644
index 0000000..44989ca
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService16.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRService16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MICR for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2001-Apr-18 JavaPOS Release 1.6                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MICRService16
+  extends MICRService15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService17.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService17.java
new file mode 100644
index 0000000..e2e5947
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService17.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRService17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MICR for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MICRService17
+  extends MICRService16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService18.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService18.java
new file mode 100644
index 0000000..99e62e4
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService18.java
@@ -0,0 +1,42 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRService18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MICR for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MICRService18
+  extends MICRService17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService19.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService19.java
new file mode 100644
index 0000000..9e64680
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MICRService19.java
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MICRService19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MICR for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MICRService19
+  extends MICRService18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService110.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService110.java
new file mode 100644
index 0000000..5fdee60
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService110.java
@@ -0,0 +1,52 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRService110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MSR for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+// 2006-Oct-23 JavaPOS 1.10.2 Update                               BS
+//   Fixed type of writeTracks data parameter to be byte[][] as
+//   UnifiedPOS has corrected the type from "string" to
+//   "array of binary".
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MSRService110
+  extends MSRService19
+{
+  // Capabilities
+  public int     getCapWritableTracks()
+                     throws JposException;
+
+  // Properties
+  public int     getEncodingMaxLength()
+                     throws JposException;
+  public int     getTracksToWrite()
+                     throws JposException;
+  public void    setTracksToWrite(int tracks)
+                     throws JposException;
+
+  // Methods
+  public void    clearInputProperties()
+                     throws JposException;
+  public void    writeTracks(byte[][] data, int timeout)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService111.java
new file mode 100644
index 0000000..ce99d3e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService111.java
@@ -0,0 +1,35 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MSR for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-08 JavaPOS release 1.11                                BS
+// 2006-Oct-23 JavaPOS 1.10.2 Update                               BS
+//   Fixed type of writeTracks data parameter to be byte[][] as
+//   UnifiedPOS has corrected the type from "string" to
+//   "array of binary".
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MSRService111 extends MSRService110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService112.java
new file mode 100644
index 0000000..d947b23
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService112.java
@@ -0,0 +1,71 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MSR for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MSRService112 extends MSRService111
+{
+  // Capabilities
+  public String  getCapCardAuthentication() throws JposException;
+  public int     getCapDataEncryption() throws JposException;
+  public int     getCapDeviceAuthentication() throws JposException;
+  public boolean getCapTrackDataMasking() throws JposException;
+
+  // Properties
+  public byte[]  getAdditionalSecurityInformation() throws JposException;
+  public byte[]  getCardAuthenticationData() throws JposException;
+  public int     getCardAuthenticationDataLength() throws JposException;
+  public String  getCardPropertyList() throws JposException;
+  public String  getCardType() throws JposException;
+  public String  getCardTypeList() throws JposException;
+  public int     getDataEncryptionAlgorithm() throws JposException;
+  public void    setDataEncryptionAlgorithm(int encryptAlgorithm) throws JposException;
+  public boolean getDeviceAuthenticated() throws JposException;
+  public int     getDeviceAuthenticationProtocol() throws JposException;
+  public byte[]  getTrack1EncryptedData() throws JposException;
+  public int     getTrack1EncryptedDataLength() throws JposException;
+  public byte[]  getTrack2EncryptedData() throws JposException;
+  public int     getTrack2EncryptedDataLength() throws JposException;
+  public byte[]  getTrack3EncryptedData() throws JposException;
+  public int     getTrack3EncryptedDataLength() throws JposException;
+  public byte[]  getTrack4EncryptedData() throws JposException;
+  public int     getTrack4EncryptedDataLength() throws JposException;
+  public String  getWriteCardType() throws JposException;
+  public void    setWriteCardType(String cardType) throws JposException;
+
+  // Methods
+  public void    authenticateDevice(byte[] response)
+                     throws JposException;
+  public void    deauthenticateDevice(byte[] response)
+                     throws JposException;
+  public void    retrieveCardProperty(String name,
+                                      String[] value)
+                     throws JposException;
+  public void    retrieveDeviceAuthenticationData(byte[] challenge)
+                     throws JposException;
+  public void    updateKey(String key,
+                           String keyName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService113.java
new file mode 100644
index 0000000..e1f27e4
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService113.java
@@ -0,0 +1,43 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MSR for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+// 2011-Aug-22 JavaPOS Release 1.13.3                              BS
+//   Added new retrieveDeviceAuthenticationData with correct
+//     parameter type. Old method left in place for compatibility.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MSRService113 extends MSRService112
+{
+  // The retrieveDeviceAuthenticationData method's challenge parameter
+  // was incorrectly typed as byte[] in version 1.12. Since the parameter
+  // is an in/out parameter, the type should be byte[][].
+  //
+  // The old version is left for Application and Device Service
+  // compatibility.
+
+  // Methods
+  public void    retrieveDeviceAuthenticationData(byte[][] challenge)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService114.java
new file mode 100644
index 0000000..dfa0b7d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to MSR for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MSRService114 extends MSRService113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService12.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService12.java
new file mode 100644
index 0000000..578f55b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService12.java
@@ -0,0 +1,68 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRService12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to MSR for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MSRService12 extends BaseService
+{
+    // Capabilities
+    public boolean getCapISO() throws JposException;
+    public boolean getCapJISOne() throws JposException;
+    public boolean getCapJISTwo() throws JposException;
+
+    // Properties
+    public String  getAccountNumber() throws JposException;
+    public boolean getAutoDisable() throws JposException;
+    public void    setAutoDisable(boolean autoDisable) throws JposException;
+    public int     getDataCount() throws JposException;
+    public boolean getDataEventEnabled() throws JposException;
+    public void    setDataEventEnabled(boolean dataEventEnabled)
+                       throws JposException;
+    public boolean getDecodeData() throws JposException;
+    public void    setDecodeData(boolean decodeData) throws JposException;
+    public int     getErrorReportingType() throws JposException;
+    public void    setErrorReportingType(int errorReportingType)
+                       throws JposException;
+    public String  getExpirationDate() throws JposException;
+    public String  getFirstName() throws JposException;
+    public String  getMiddleInitial() throws JposException;
+    public boolean getParseDecodeData() throws JposException;
+    public void    setParseDecodeData(boolean parseDecodeData)
+                       throws JposException;
+    public String  getServiceCode() throws JposException;
+    public String  getSuffix() throws JposException;
+    public String  getSurname() throws JposException;
+    public String  getTitle() throws JposException;
+    public byte[]  getTrack1Data() throws JposException;
+    public byte[]  getTrack1DiscretionaryData() throws JposException;
+    public byte[]  getTrack2Data() throws JposException;
+    public byte[]  getTrack2DiscretionaryData() throws JposException;
+    public byte[]  getTrack3Data() throws JposException;
+    public int     getTracksToRead() throws JposException;
+    public void    setTracksToRead(int tracksToRead) throws JposException;
+
+    // Methods
+    public void    clearInput() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService13.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService13.java
new file mode 100644
index 0000000..3914f5c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService13.java
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRService13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MSR for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MSRService13 extends MSRService12
+{
+    // Capabilities
+    public int     getCapPowerReporting() throws JposException;
+
+    // Properties
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService14.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService14.java
new file mode 100644
index 0000000..96f75ea
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRService14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MSR for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MSRService14 extends MSRService13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService15.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService15.java
new file mode 100644
index 0000000..5cd7675
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService15.java
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRService15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MSR for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2000-Apr-17 JavaPOS Release 1.5                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface MSRService15
+  extends MSRService14, JposServiceInstance
+{
+  // Capabilities
+  public boolean getCapTransmitSentinels() throws JposException;
+
+  // Properties
+  public byte[]  getTrack4Data() throws JposException;
+  public boolean getTransmitSentinels() throws JposException;
+  public void    setTransmitSentinels(boolean transmitSentinels)
+  								 throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService16.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService16.java
new file mode 100644
index 0000000..a31e7a3
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService16.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRService16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MSR for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2001-Apr-18 JavaPOS Release 1.6                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MSRService16
+  extends MSRService15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService17.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService17.java
new file mode 100644
index 0000000..fd7e079
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService17.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRService17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MSR for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MSRService17
+  extends MSRService16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService18.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService18.java
new file mode 100644
index 0000000..34892ce
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService18.java
@@ -0,0 +1,42 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRService18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MSR for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MSRService18
+  extends MSRService17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService19.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService19.java
new file mode 100644
index 0000000..7c7a6ab
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MSRService19.java
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MSRService19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to MSR for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MSRService19
+  extends MSRService18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MotionSensorService110.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MotionSensorService110.java
new file mode 100644
index 0000000..d1fa84a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MotionSensorService110.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MotionSensorService110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Motion Sensor for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface MotionSensorService110
+  extends MotionSensorService19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MotionSensorService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MotionSensorService111.java
new file mode 100644
index 0000000..c6305c7
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MotionSensorService111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MotionSensorService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Motion Sensor for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MotionSensorService111 extends MotionSensorService110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MotionSensorService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MotionSensorService112.java
new file mode 100644
index 0000000..955d167
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MotionSensorService112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MotionSensorService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Motion Sensor for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MotionSensorService112 extends MotionSensorService111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MotionSensorService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MotionSensorService113.java
new file mode 100644
index 0000000..875faeb
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MotionSensorService113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MotionSensorService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Motion Sensor for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MotionSensorService113 extends MotionSensorService112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MotionSensorService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MotionSensorService114.java
new file mode 100644
index 0000000..7a629f5
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MotionSensorService114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MotionSensorService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Motion Sensor for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface MotionSensorService114 extends MotionSensorService113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MotionSensorService17.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MotionSensorService17.java
new file mode 100644
index 0000000..f16f041
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MotionSensorService17.java
@@ -0,0 +1,45 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MotionSensorService17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Motion Sensor for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface MotionSensorService17
+  extends BaseService, JposServiceInstance
+{
+  // Capabilities
+  public int     getCapPowerReporting() throws JposException;
+
+  // Properties
+  public boolean getMotion() throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+  public int     getTimeout() throws JposException;
+  public void    setTimeout(int timeout) throws JposException;
+
+  // Methods
+  public void    waitForMotion(int timeout) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MotionSensorService18.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MotionSensorService18.java
new file mode 100644
index 0000000..6a7277d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MotionSensorService18.java
@@ -0,0 +1,43 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MotionSensorService18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Motion Sensor for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface MotionSensorService18
+  extends MotionSensorService17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/MotionSensorService19.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/MotionSensorService19.java
new file mode 100644
index 0000000..b715865
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/MotionSensorService19.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// MotionSensorService19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Motion Sensor for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface MotionSensorService19
+  extends MotionSensorService18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService110.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService110.java
new file mode 100644
index 0000000..27d91f1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService110.java
@@ -0,0 +1,34 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PINPadService110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to PIN Pad for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface PINPadService110
+  extends PINPadService19
+{
+  // Methods
+  public void    clearInputProperties()
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService111.java
new file mode 100644
index 0000000..ee7d9b1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PINPadService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to PIN Pad for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface PINPadService111 extends PINPadService110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService112.java
new file mode 100644
index 0000000..f1f3a5d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PINPadService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to PIN Pad for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface PINPadService112 extends PINPadService111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService113.java
new file mode 100644
index 0000000..b787578
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PINPadService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to PIN Pad for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface PINPadService113 extends PINPadService112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService114.java
new file mode 100644
index 0000000..857577b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PINPadService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to PIN Pad for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface PINPadService114 extends PINPadService113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService13.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService13.java
new file mode 100644
index 0000000..b3f96e7
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService13.java
@@ -0,0 +1,86 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PINPadService13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to PIN Pad for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface PINPadService13 extends BaseService
+{
+    // Capabilities
+    public int     getCapDisplay() throws JposException;
+    public int     getCapLanguage() throws JposException;
+    public boolean getCapKeyboard() throws JposException;
+    public boolean getCapMACCalculation() throws JposException;
+    public int     getCapPowerReporting() throws JposException;
+    public boolean getCapTone() throws JposException;
+
+    // Properties
+    public String  getAccountNumber() throws JposException;
+    public void    setAccountNumber(String accountNumber) throws JposException;
+    public String  getAdditionalSecurityInformation() throws JposException;
+    public long    getAmount() throws JposException;
+    public void    setAmount(long amount) throws JposException;
+    public String  getAvailableLanguagesList() throws JposException;
+    public String  getAvailablePromptsList() throws JposException;
+    public int     getDataCount() throws JposException;
+    public boolean getDataEventEnabled() throws JposException;
+    public void    setDataEventEnabled(boolean dataEventEnabled)
+                       throws JposException;
+    public String  getEncryptedPIN() throws JposException;
+    public int     getMaximumPINLength() throws JposException;
+    public void    setMaximumPINLength(int maximumPINLength) throws JposException;
+    public String  getMerchantID() throws JposException;
+    public void    setMerchantID(String merchantID) throws JposException;
+    public int     getMinimumPINLength() throws JposException;
+    public void    setMinimumPINLength(int minimumPINLength) throws JposException;
+    public boolean getPINEntryEnabled() throws JposException;
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+    public int     getPrompt() throws JposException;
+    public void    setPrompt(int propmpt) throws JposException;
+    public String  getPromptLanguage() throws JposException;
+    public void    setPromptLanguage(String promptLanguage) throws JposException;
+    public String  getTerminalID() throws JposException;
+    public void    setTerminalID(String terminalID) throws JposException;
+    public byte[]  getTrack1Data() throws JposException;
+    public void    setTrack1Data(byte[] track1Data) throws JposException;
+    public byte[]  getTrack2Data() throws JposException;
+    public void    setTrack2Data(byte[] track2Data) throws JposException;
+    public byte[]  getTrack3Data() throws JposException;
+    public void    setTrack3Data(byte[] track3Data) throws JposException;
+    public int     getTransactionType() throws JposException;
+    public void    setTransactionType(int transactionType) throws JposException;
+
+    // Methods
+    public void    beginEFTTransaction(String PINPadSystem, int transactionHost)
+                       throws JposException;
+    public void    clearInput() throws JposException;
+    public void    computeMAC(String inMsg, String[] outMsg)
+                       throws JposException;
+    public void    enablePINEntry() throws JposException;
+    public void    endEFTTransaction(int completionCode) throws JposException;
+    public void    updateKey(int keyNum, String key) throws JposException;
+    public void    verifyMAC(String message) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService14.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService14.java
new file mode 100644
index 0000000..a684fb6
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PINPadService14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to PIN Pad for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface PINPadService14 extends PINPadService13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService15.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService15.java
new file mode 100644
index 0000000..18c5d60
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService15.java
@@ -0,0 +1,35 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PINPadService15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to PIN Pad for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2000-Apr-17 JavaPOS Release 1.5                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface PINPadService15
+  extends PINPadService14, JposServiceInstance
+{
+    // Properties
+    public byte[]  getTrack4Data() throws JposException;
+    public void    setTrack4Data(byte[] track4Data) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService16.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService16.java
new file mode 100644
index 0000000..cf8c9ba
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService16.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PINPadService16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to PIN Pad for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2001-Apr-18 JavaPOS Release 1.6                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface PINPadService16
+  extends PINPadService15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService17.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService17.java
new file mode 100644
index 0000000..2fd92d6
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService17.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PINPadService17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to PIN Pad for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface PINPadService17
+  extends PINPadService16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService18.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService18.java
new file mode 100644
index 0000000..a0cbe3b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService18.java
@@ -0,0 +1,42 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PINPadService18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to PIN Pad for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface PINPadService18
+  extends PINPadService17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService19.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService19.java
new file mode 100644
index 0000000..7565d38
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/PINPadService19.java
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PINPadService19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to PIN Pad for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface PINPadService19
+  extends PINPadService18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService110.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService110.java
new file mode 100644
index 0000000..718293f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService110.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardService110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Keyboard for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSKeyboardService110
+  extends POSKeyboardService19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService111.java
new file mode 100644
index 0000000..b1b4214
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Keyboard for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSKeyboardService111 extends POSKeyboardService110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService112.java
new file mode 100644
index 0000000..b8c5a52
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Keyboard for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSKeyboardService112 extends POSKeyboardService111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService113.java
new file mode 100644
index 0000000..f0a4d24
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Keyboard for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSKeyboardService113 extends POSKeyboardService112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService114.java
new file mode 100644
index 0000000..7ba5da1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to POS Keyboard for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSKeyboardService114 extends POSKeyboardService113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService12.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService12.java
new file mode 100644
index 0000000..224d7eb
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService12.java
@@ -0,0 +1,47 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardService12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to POS Keyboard for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSKeyboardService12 extends BaseService
+{
+    // Capabilities
+    public boolean getCapKeyUp() throws JposException;
+
+    // Properties
+    public boolean getAutoDisable() throws JposException;
+    public void    setAutoDisable(boolean autoDisable) throws JposException;
+    public int     getDataCount() throws JposException;
+    public boolean getDataEventEnabled() throws JposException;
+    public void    setDataEventEnabled(boolean dataEventEnabled)
+                       throws JposException;
+    public int     getEventTypes() throws JposException;
+    public void    setEventTypes(int eventTypes) throws JposException;
+    public int     getPOSKeyData() throws JposException;
+    public int     getPOSKeyEventType() throws JposException;
+
+    // Methods
+    public void    clearInput() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService13.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService13.java
new file mode 100644
index 0000000..7c39cb7
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService13.java
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardService13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Keyboard for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSKeyboardService13 extends POSKeyboardService12
+{
+    // Capabilities
+    public int     getCapPowerReporting() throws JposException;
+
+    // Properties
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService14.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService14.java
new file mode 100644
index 0000000..a4e6ac6
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardService14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Keyboard for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSKeyboardService14 extends POSKeyboardService13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService15.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService15.java
new file mode 100644
index 0000000..2de6c56
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService15.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardService15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Keyboard for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2000-Apr-17 JavaPOS Release 1.5                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface POSKeyboardService15
+  extends POSKeyboardService14, JposServiceInstance
+{
+  // Nothing new added for release 1.5
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService16.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService16.java
new file mode 100644
index 0000000..4401768
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService16.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardService16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Keyboard for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2001-Apr-18 JavaPOS Release 1.6                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSKeyboardService16
+  extends POSKeyboardService15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService17.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService17.java
new file mode 100644
index 0000000..9c7d6df
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService17.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardService17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Keyboard for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSKeyboardService17
+  extends POSKeyboardService16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService18.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService18.java
new file mode 100644
index 0000000..86039f7
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService18.java
@@ -0,0 +1,42 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardService18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Keyboard for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSKeyboardService18
+  extends POSKeyboardService17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService19.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService19.java
new file mode 100644
index 0000000..4045bdb
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSKeyboardService19.java
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSKeyboardService19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Keyboard for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSKeyboardService19
+  extends POSKeyboardService18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService110.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService110.java
new file mode 100644
index 0000000..c5c98a1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService110.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPowerService110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POSPower for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface POSPowerService110
+  extends POSPowerService19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService111.java
new file mode 100644
index 0000000..a599258
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPowerService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POSPower for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSPowerService111 extends POSPowerService110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService112.java
new file mode 100644
index 0000000..64f1245
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPowerService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POSPower for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSPowerService112 extends POSPowerService111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService113.java
new file mode 100644
index 0000000..80e1c27
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPowerService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POSPower for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSPowerService113 extends POSPowerService112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService114.java
new file mode 100644
index 0000000..93a378b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPowerService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to POSPower for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSPowerService114 extends POSPowerService113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService15.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService15.java
new file mode 100644
index 0000000..6166bee
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService15.java
@@ -0,0 +1,54 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPowerService15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POSPower for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2000-Apr-17 JavaPOS Release 1.5                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface POSPowerService15
+  extends BaseService, JposServiceInstance
+{
+    // Capabilities
+    public boolean getCapFanAlarm() throws JposException;
+    public boolean getCapHeatAlarm() throws JposException;
+    public int     getCapPowerReporting() throws JposException;
+    public boolean getCapQuickCharge() throws JposException;
+    public boolean getCapShutdownPOS() throws JposException;
+    public int     getCapUPSChargeState() throws JposException;
+
+    // Properties
+    public int     getEnforcedShutdownDelayTime() throws JposException;
+    public void    setEnforcedShutdownDelayTime(int delay)
+                       throws JposException;
+    public int     getPowerFailDelayTime() throws JposException;
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+    public boolean getQuickChargeMode() throws JposException;
+    public int     getQuickChargeTime() throws JposException;
+    public int     getUPSChargeState() throws JposException;
+
+    // Methods
+    public void    shutdownPOS() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService16.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService16.java
new file mode 100644
index 0000000..4e9201f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService16.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPowerService16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POSPower for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2001-Apr-18 JavaPOS Release 1.6                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface POSPowerService16
+  extends POSPowerService15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService17.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService17.java
new file mode 100644
index 0000000..93dbd86
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService17.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPowerService17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POSPower for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface POSPowerService17
+  extends POSPowerService16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService18.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService18.java
new file mode 100644
index 0000000..fc7cfa1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService18.java
@@ -0,0 +1,43 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPowerService18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POSPower for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface POSPowerService18
+  extends POSPowerService17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService19.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService19.java
new file mode 100644
index 0000000..a95c841
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPowerService19.java
@@ -0,0 +1,61 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPowerService19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POSPower for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface POSPowerService19
+  extends POSPowerService18
+{
+  // Capabilities
+  public boolean getCapBatteryCapacityRemaining() throws JposException;
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapRestartPOS() throws JposException;
+  public boolean getCapStandbyPOS() throws JposException;
+  public boolean getCapSuspendPOS() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+  public boolean getCapVariableBatteryCriticallyLowThreshold() throws JposException;
+  public boolean getCapVariableBatteryLowThreshold() throws JposException;
+
+  // Properties
+  public int     getBatteryCapacityRemaining() throws JposException;
+  public int     getBatteryCriticallyLowThreshold() throws JposException;
+  public void    setBatteryCriticallyLowThreshold(int threshold) throws JposException;
+  public int     getBatteryLowThreshold() throws JposException;
+  public void    setBatteryLowThreshold(int threshold) throws JposException;
+  public int     getPowerSource() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    restartPOS()
+                     throws JposException;
+  public void    standbyPOS(int reason)
+                     throws JposException;
+  public void    suspendPOS(int reason)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService110.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService110.java
new file mode 100644
index 0000000..c89ec96
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService110.java
@@ -0,0 +1,35 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterService110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Printer for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSPrinterService110
+  extends POSPrinterService19
+{
+  // Methods
+  public void    printMemoryBitmap(int station, byte[] data, int type,
+                                   int width, int alignment)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService111.java
new file mode 100644
index 0000000..b06c51d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Printer for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSPrinterService111 extends POSPrinterService110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService112.java
new file mode 100644
index 0000000..8ab3673
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Printer for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSPrinterService112 extends POSPrinterService111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService113.java
new file mode 100644
index 0000000..fb04a79
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService113.java
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Printer for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSPrinterService113 extends POSPrinterService112
+{
+  // Capabilities
+  public int getCapRecRuledLine() throws JposException;
+  public int getCapSlpRuledLine() throws JposException;
+
+  // Methods
+  public void drawRuledLine(int station, String positionList,
+                            int lineDirection, int lineWidth,
+                            int lineStyle, int lineColor)
+    throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService114.java
new file mode 100644
index 0000000..68145ed
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to POS Printer for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSPrinterService114 extends POSPrinterService113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService12.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService12.java
new file mode 100644
index 0000000..8727926
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService12.java
@@ -0,0 +1,172 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterService12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to POS Printer for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSPrinterService12 extends BaseService
+{
+    // Capabilities
+    public int     getCapCharacterSet() throws JposException;
+    public boolean getCapConcurrentJrnRec() throws JposException;
+    public boolean getCapConcurrentJrnSlp() throws JposException;
+    public boolean getCapConcurrentRecSlp() throws JposException;
+    public boolean getCapCoverSensor() throws JposException;
+    public boolean getCapJrn2Color() throws JposException;
+    public boolean getCapJrnBold() throws JposException;
+    public boolean getCapJrnDhigh() throws JposException;
+    public boolean getCapJrnDwide() throws JposException;
+    public boolean getCapJrnDwideDhigh() throws JposException;
+    public boolean getCapJrnEmptySensor() throws JposException;
+    public boolean getCapJrnItalic() throws JposException;
+    public boolean getCapJrnNearEndSensor() throws JposException;
+    public boolean getCapJrnPresent() throws JposException;
+    public boolean getCapJrnUnderline() throws JposException;
+    public boolean getCapRec2Color() throws JposException;
+    public boolean getCapRecBarCode() throws JposException;
+    public boolean getCapRecBitmap() throws JposException;
+    public boolean getCapRecBold() throws JposException;
+    public boolean getCapRecDhigh() throws JposException;
+    public boolean getCapRecDwide() throws JposException;
+    public boolean getCapRecDwideDhigh() throws JposException;
+    public boolean getCapRecEmptySensor() throws JposException;
+    public boolean getCapRecItalic() throws JposException;
+    public boolean getCapRecLeft90() throws JposException;
+    public boolean getCapRecNearEndSensor() throws JposException;
+    public boolean getCapRecPapercut() throws JposException;
+    public boolean getCapRecPresent() throws JposException;
+    public boolean getCapRecRight90() throws JposException;
+    public boolean getCapRecRotate180() throws JposException;
+    public boolean getCapRecStamp() throws JposException;
+    public boolean getCapRecUnderline() throws JposException;
+    public boolean getCapSlp2Color() throws JposException;
+    public boolean getCapSlpBarCode() throws JposException;
+    public boolean getCapSlpBitmap() throws JposException;
+    public boolean getCapSlpBold() throws JposException;
+    public boolean getCapSlpDhigh() throws JposException;
+    public boolean getCapSlpDwide() throws JposException;
+    public boolean getCapSlpDwideDhigh() throws JposException;
+    public boolean getCapSlpEmptySensor() throws JposException;
+    public boolean getCapSlpFullslip() throws JposException;
+    public boolean getCapSlpItalic() throws JposException;
+    public boolean getCapSlpLeft90() throws JposException;
+    public boolean getCapSlpNearEndSensor() throws JposException;
+    public boolean getCapSlpPresent() throws JposException;
+    public boolean getCapSlpRight90() throws JposException;
+    public boolean getCapSlpRotate180() throws JposException;
+    public boolean getCapSlpUnderline() throws JposException;
+    public boolean getCapTransaction() throws JposException;
+
+    // Properties
+    public boolean getAsyncMode() throws JposException;
+    public void    setAsyncMode(boolean asyncMode) throws JposException;
+    public int     getCharacterSet() throws JposException;
+    public void    setCharacterSet(int characterSet) throws JposException;
+    public String  getCharacterSetList() throws JposException;
+    public boolean getCoverOpen() throws JposException;
+    public int     getErrorLevel() throws JposException;
+    public int     getErrorStation() throws JposException;
+    public String  getErrorString() throws JposException;
+    public boolean getFlagWhenIdle() throws JposException;
+    public void    setFlagWhenIdle(boolean flagWhenIdle) throws JposException;
+    public String  getFontTypefaceList() throws JposException;
+    public boolean getJrnEmpty() throws JposException;
+    public boolean getJrnLetterQuality() throws JposException;
+    public void    setJrnLetterQuality(boolean jrnLetterQuality)
+                       throws JposException;
+    public int     getJrnLineChars() throws JposException;
+    public void    setJrnLineChars(int jrnLineChars) throws JposException;
+    public String  getJrnLineCharsList() throws JposException;
+    public int     getJrnLineHeight() throws JposException;
+    public void    setJrnLineHeight(int jrnLineHeight) throws JposException;
+    public int     getJrnLineSpacing() throws JposException;
+    public void    setJrnLineSpacing(int jrnLineSpacing) throws JposException;
+    public int     getJrnLineWidth() throws JposException;
+    public boolean getJrnNearEnd() throws JposException;
+    public int     getMapMode() throws JposException;
+    public void    setMapMode(int mapMode) throws JposException;
+    public int     getOutputID() throws JposException;
+    public String  getRecBarCodeRotationList() throws JposException;
+    public boolean getRecEmpty() throws JposException;
+    public boolean getRecLetterQuality() throws JposException;
+    public void    setRecLetterQuality(boolean recLetterQuality)
+                       throws JposException;
+    public int     getRecLineChars() throws JposException;
+    public void    setRecLineChars(int recLineChars) throws JposException;
+    public String  getRecLineCharsList() throws JposException;
+    public int     getRecLineHeight() throws JposException;
+    public void    setRecLineHeight(int recLineHeight) throws JposException;
+    public int     getRecLineSpacing() throws JposException;
+    public void    setRecLineSpacing(int recLineSpacing) throws JposException;
+    public int     getRecLinesToPaperCut() throws JposException;
+    public int     getRecLineWidth() throws JposException;
+    public boolean getRecNearEnd() throws JposException;
+    public int     getRecSidewaysMaxChars() throws JposException;
+    public int     getRecSidewaysMaxLines() throws JposException;
+    public int     getRotateSpecial() throws JposException;
+    public void    setRotateSpecial(int rotateSpecial) throws JposException;
+    public String  getSlpBarCodeRotationList() throws JposException;
+    public boolean getSlpEmpty() throws JposException;
+    public boolean getSlpLetterQuality() throws JposException;
+    public void    setSlpLetterQuality(boolean recLetterQuality)
+                       throws JposException;
+    public int     getSlpLineChars() throws JposException;
+    public void    setSlpLineChars(int recLineChars) throws JposException;
+    public String  getSlpLineCharsList() throws JposException;
+    public int     getSlpLineHeight() throws JposException;
+    public void    setSlpLineHeight(int recLineHeight) throws JposException;
+    public int     getSlpLinesNearEndToEnd() throws JposException;
+    public int     getSlpLineSpacing() throws JposException;
+    public void    setSlpLineSpacing(int recLineSpacing) throws JposException;
+    public int     getSlpLineWidth() throws JposException;
+    public int     getSlpMaxLines() throws JposException;
+    public boolean getSlpNearEnd() throws JposException;
+    public int     getSlpSidewaysMaxChars() throws JposException;
+    public int     getSlpSidewaysMaxLines() throws JposException;
+
+    // Methods
+    public void    beginInsertion(int timeout) throws JposException;
+    public void    beginRemoval(int timeout) throws JposException;
+    public void    clearOutput() throws JposException;
+    public void    cutPaper(int percentage) throws JposException;
+    public void    endInsertion() throws JposException;
+    public void    endRemoval() throws JposException;
+    public void    printBarCode(int station, String data, int symbology,
+                                int height, int width, int alignment,
+                                int textPosition) throws JposException;
+    public void    printBitmap(int station, String fileName, int width,
+                               int alignment) throws JposException;
+    public void    printImmediate(int station, String data)
+                       throws JposException;
+    public void    printNormal(int station, String data) throws JposException;
+    public void    printTwoNormal(int stations, String data1, String data2)
+                       throws JposException;
+    public void    rotatePrint(int station, int rotation) throws JposException;
+    public void    setBitmap(int bitmapNumber, int station, String fileName,
+                             int width, int alignment) throws JposException;
+    public void    setLogo(int location, String data) throws JposException;
+    public void    transactionPrint(int station, int control)
+                       throws JposException;
+    public void    validateData(int station, String data) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService13.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService13.java
new file mode 100644
index 0000000..3271552
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService13.java
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterService13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Printer for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSPrinterService13 extends POSPrinterService12
+{
+    // Capabilities
+    public int     getCapPowerReporting() throws JposException;
+
+    // Properties
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService14.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService14.java
new file mode 100644
index 0000000..6ad17ef
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterService14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Printer for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSPrinterService14 extends POSPrinterService13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService15.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService15.java
new file mode 100644
index 0000000..d976825
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService15.java
@@ -0,0 +1,59 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterService15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Printer for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2000-Apr-17 JavaPOS Release 1.5                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface POSPrinterService15
+  extends POSPrinterService14, JposServiceInstance
+{
+    // Capabilities
+    public int     getCapJrnCartridgeSensor() throws JposException;
+    public int     getCapJrnColor() throws JposException;
+    public int     getCapRecCartridgeSensor() throws JposException;
+    public int     getCapRecColor() throws JposException;
+    public int     getCapRecMarkFeed() throws JposException;
+    public boolean getCapSlpBothSidesPrint() throws JposException;
+    public int     getCapSlpCartridgeSensor() throws JposException;
+    public int     getCapSlpColor() throws JposException;
+
+    // Properties
+    public int     getCartridgeNotify() throws JposException;
+    public void    setCartridgeNotify(int notify) throws JposException;
+    public int     getJrnCartridgeState() throws JposException;
+    public int     getJrnCurrentCartridge() throws JposException;
+    public void    setJrnCurrentCartridge(int cartridge) throws JposException;
+    public int     getRecCartridgeState() throws JposException;
+    public int     getRecCurrentCartridge() throws JposException;
+    public void    setRecCurrentCartridge(int cartridge) throws JposException;
+    public int     getSlpCartridgeState() throws JposException;
+    public int     getSlpCurrentCartridge() throws JposException;
+    public void    setSlpCurrentCartridge(int cartridge) throws JposException;
+    public int     getSlpPrintSide() throws JposException;
+
+    // Methods
+    public void    changePrintSide(int side) throws JposException;
+    public void    markFeed(int type) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService16.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService16.java
new file mode 100644
index 0000000..c90ae2b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService16.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterService16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Printer for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2001-Apr-18 JavaPOS Release 1.6                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSPrinterService16
+  extends POSPrinterService15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService17.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService17.java
new file mode 100644
index 0000000..3751992
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService17.java
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterService17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Printer for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSPrinterService17
+  extends POSPrinterService16
+{
+  // Capabilities
+  public boolean getCapMapCharacterSet() throws JposException;
+
+  // Properties
+  public boolean getMapCharacterSet() throws JposException;
+  public void    setMapCharacterSet(boolean mapCharacterSet)
+                   throws JposException;
+  public String  getRecBitmapRotationList() throws JposException;
+  public String  getSlpBitmapRotationList() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService18.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService18.java
new file mode 100644
index 0000000..93a69a1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService18.java
@@ -0,0 +1,42 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterService18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Printer for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSPrinterService18
+  extends POSPrinterService17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService19.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService19.java
new file mode 100644
index 0000000..f5ac9b5
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/POSPrinterService19.java
@@ -0,0 +1,61 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// POSPrinterService19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to POS Printer for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface POSPrinterService19
+  extends POSPrinterService18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapConcurrentPageMode() throws JposException;
+  public boolean getCapRecPageMode() throws JposException;
+  public boolean getCapSlpPageMode() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Properties
+  public String  getPageModeArea() throws JposException;
+  public int     getPageModeDescriptor() throws JposException;
+  public int     getPageModeHorizontalPosition() throws JposException;
+  public void    setPageModeHorizontalPosition(int position) throws JposException;
+  public String  getPageModePrintArea() throws JposException;
+  public void    setPageModePrintArea(String area) throws JposException;
+  public int     getPageModePrintDirection() throws JposException;
+  public void    setPageModePrintDirection(int direction) throws JposException;
+  public int     getPageModeStation() throws JposException;
+  public void    setPageModeStation(int station) throws JposException;
+  public int     getPageModeVerticalPosition() throws JposException;
+  public void    setPageModeVerticalPosition(int position) throws JposException;
+
+  // Methods
+  public void    clearPrintArea()
+                     throws JposException;
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    pageModePrint(int control)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService110.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService110.java
new file mode 100644
index 0000000..529c7ad
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService110.java
@@ -0,0 +1,35 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PointCardRWService110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to the Point Card Reader Wwriter for
+//   release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface PointCardRWService110
+  extends PointCardRWService19
+{
+  // Methods
+  public void    clearInputProperties()
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService111.java
new file mode 100644
index 0000000..1df3de6
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService111.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PointCardRWService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Point Card Reader Writer for
+//   release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface PointCardRWService111 extends PointCardRWService110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService112.java
new file mode 100644
index 0000000..a5fe7b6
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService112.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PointCardRWService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Point Card Reader Writer for
+//   release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface PointCardRWService112 extends PointCardRWService111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService113.java
new file mode 100644
index 0000000..7b118bd
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService113.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PointCardRWService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Point Card Reader Writer for
+//   release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface PointCardRWService113 extends PointCardRWService112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService114.java
new file mode 100644
index 0000000..32a476e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PointCardRWService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Point Card Reader Writer for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface PointCardRWService114 extends PointCardRWService113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService15.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService15.java
new file mode 100644
index 0000000..747567f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService15.java
@@ -0,0 +1,123 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PointCardRWService15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to the Point Card Reader Wwriter for
+//   release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2000-Apr-17 JavaPOS Release 1.5                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface PointCardRWService15
+  extends BaseService, JposServiceInstance
+{
+    // Capabilities
+    public boolean getCapBold() throws JposException;
+    public int     getCapCardEntranceSensor() throws JposException;
+    public int     getCapCharacterSet() throws JposException;
+    public boolean getCapCleanCard() throws JposException;
+    public boolean getCapClearPrint() throws JposException;
+    public boolean getCapDhigh() throws JposException;
+    public boolean getCapDwide() throws JposException;
+    public boolean getCapDwideDhigh() throws JposException;
+    public boolean getCapItalic() throws JposException;
+    public boolean getCapLeft90() throws JposException;
+    public int     getCapPowerReporting() throws JposException;
+    public boolean getCapPrint() throws JposException;
+    public boolean getCapPrintMode() throws JposException;
+    public boolean getCapRight90() throws JposException;
+    public boolean getCapRotate180() throws JposException;
+    public int     getCapTracksToRead() throws JposException;
+    public int     getCapTracksToWrite() throws JposException;
+
+    // Properties
+    public int     getCardState() throws JposException;
+    public int     getCharacterSet() throws JposException;
+    public void    setCharacterSet(int charSet) throws JposException;
+    public String  getCharacterSetList() throws JposException;
+    public int     getDataCount() throws JposException;
+    public boolean getDataEventEnabled() throws JposException;
+    public void    setDataEventEnabled(boolean dataEventEnabled)
+                       throws JposException;
+    public String  getFontTypeFaceList() throws JposException;
+    public int     getLineChars() throws JposException;
+    public void    setLineChars(int lineChars) throws JposException;
+    public String  getLineCharsList() throws JposException;
+    public int     getLineHeight() throws JposException;
+    public void    setLineHeight(int lineHeight) throws JposException;
+    public int     getLineSpacing() throws JposException;
+    public void    setLineSpacing(int lineSpacing) throws JposException;
+    public int     getLineWidth() throws JposException;
+    public int     getMapMode() throws JposException;
+    public void    setMapMode(int mapMode) throws JposException;
+    public int     getMaxLines() throws JposException;
+    public int     getOutputID() throws JposException;
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+    public int     getPrintHeight() throws JposException;
+    public int     getReadState1() throws JposException;
+    public int     getReadState2() throws JposException;
+    public int     getRecvLength1() throws JposException;
+    public int     getRecvLength2() throws JposException;
+    public int     getSidewaysMaxChars() throws JposException;
+    public int     getSidewaysMaxLines() throws JposException;
+    public int     getTracksToRead() throws JposException;
+    public void    setTracksToRead(int tracksToRead) throws JposException;
+    public int     getTracksToWrite() throws JposException;
+    public void    setTracksToWrite(int tracksToWrite) throws JposException;
+    public String  getTrack1Data() throws JposException;
+    public String  getTrack2Data() throws JposException;
+    public String  getTrack3Data() throws JposException;
+    public String  getTrack4Data() throws JposException;
+    public String  getTrack5Data() throws JposException;
+    public String  getTrack6Data() throws JposException;
+    public int     getWriteState1() throws JposException;
+    public int     getWriteState2() throws JposException;
+    public String  getWrite1Data() throws JposException;
+    public void    setWrite1Data(String data) throws JposException;
+    public String  getWrite2Data() throws JposException;
+    public void    setWrite2Data(String data) throws JposException;
+    public String  getWrite3Data() throws JposException;
+    public void    setWrite3Data(String data) throws JposException;
+    public String  getWrite4Data() throws JposException;
+    public void    setWrite4Data(String data) throws JposException;
+    public String  getWrite5Data() throws JposException;
+    public void    setWrite5Data(String data) throws JposException;
+    public String  getWrite6Data() throws JposException;
+    public void    setWrite6Data(String data) throws JposException;
+
+    // Methods
+    public void    beginInsertion(int timeout) throws JposException;
+    public void    beginRemoval(int timeout) throws JposException;
+    public void    cleanCard() throws JposException;
+    public void    clearInput() throws JposException;
+    public void    clearOutput() throws JposException;
+    public void    clearPrintWrite(int kind, int hPosition, int vPosition,
+                                   int width, int height) throws JposException;
+    public void    endInsertion() throws JposException;
+    public void    endRemoval() throws JposException;
+    public void    printWrite(int kind, int hPosition, int vPosition,
+                              String data) throws JposException;
+    public void    rotatePrint(int rotation) throws JposException;
+    public void    validateData(String data) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService16.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService16.java
new file mode 100644
index 0000000..46687de
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService16.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PointCardRWService16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to the Point Card Reader Wwriter for
+//   release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2001-Apr-18 JavaPOS Release 1.6                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface PointCardRWService16
+  extends PointCardRWService15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService17.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService17.java
new file mode 100644
index 0000000..ae1a645
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService17.java
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PointCardRWService17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to the Point Card Reader Wwriter for
+//   release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface PointCardRWService17
+  extends PointCardRWService16
+{
+  // Capabilities
+  public boolean getCapMapCharacterSet() throws JposException;
+
+  // Properties
+  public boolean getMapCharacterSet() throws JposException;
+  public void    setMapCharacterSet(boolean mapCharacterSet)
+                   throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService18.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService18.java
new file mode 100644
index 0000000..e4a7973
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService18.java
@@ -0,0 +1,43 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PointCardRWService18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to the Point Card Reader Wwriter for
+//   release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface PointCardRWService18
+  extends PointCardRWService17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService19.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService19.java
new file mode 100644
index 0000000..aa8499b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/PointCardRWService19.java
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// PointCardRWService19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to the Point Card Reader Wwriter for
+//   release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface PointCardRWService19
+  extends PointCardRWService18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/RFIDScannerService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/RFIDScannerService112.java
new file mode 100644
index 0000000..2a14f62
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/RFIDScannerService112.java
@@ -0,0 +1,128 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group(including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RFIDScannerService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to RFID Scanner for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface RFIDScannerService112
+  extends BaseService, JposServiceInstance
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapContinuousRead() throws JposException;
+  public boolean getCapDisableTag() throws JposException;
+  public boolean getCapLockTag() throws JposException;
+  public int     getCapMultipleProtocols() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public boolean getCapReadTimer() throws JposException;
+  public boolean getCapRealTimeData() throws JposException;
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+  public int     getCapWriteTag() throws JposException;
+
+  // Properties
+  public boolean getAutoDisable() throws JposException;
+  public void    setAutoDisable(boolean autoDisable) throws JposException;
+  public boolean getContinuousReadMode() throws JposException;
+  public byte[]  getCurrentTagID() throws JposException;
+  public int     getCurrentTagProtocol() throws JposException;
+  public byte[]  getCurrentTagUserData() throws JposException;
+  public int     getDataCount() throws JposException;
+  public boolean getDataEventEnabled() throws JposException;
+  public void    setDataEventEnabled(boolean dataEventEnabled)
+                     throws JposException;
+  public int     getOutputID() throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+  public int     getProtocolMask() throws JposException;
+  public void    setProtocolMask(int protocolMask) throws JposException;
+  public int     getReadTimerInterval() throws JposException;
+  public void    setReadTimerInterval(int readTimerInterval) throws JposException;
+  public int     getTagCount() throws JposException;
+
+  // Methods
+  public void    clearInput()
+                     throws JposException;
+  public void    clearInputProperties()
+                     throws JposException;
+  public void    clearOutput()
+                     throws JposException;
+  public void    compareFirmwareVersion(String firmwareFileName,
+                                        int[] result)
+                     throws JposException;
+  public void    disableTag(byte[] tagID,
+                            int timeout,
+                            byte[] password)
+                     throws JposException;
+  public void    firstTag()
+                     throws JposException;
+  public void    lockTag(byte[] tagID,
+                         int timeout,
+                         byte[] password)
+                     throws JposException;
+  public void    nextTag()
+                     throws JposException;
+  public void    previousTag()
+                     throws JposException;
+  public void    readTags(int cmd,
+                          byte[] filterID,
+                          byte[] filtermask,
+                          int start,
+                          int length,
+                          int timeout,
+                          byte[] password)
+                     throws JposException;
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    startReadTags(int cmd,
+                               byte[] filterID,
+                               byte[] filtermask,
+                               int start,
+                               int length,
+                               byte[] password)
+                     throws JposException;
+  public void    stopReadTags(byte[] password)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    writeTagData(byte[] tagID,
+                              byte[] userdata,
+                              int start,
+                              int timeout,
+                              byte[] password)
+                     throws JposException;
+  public void    writeTagID(byte[] sourceID,
+                            byte[] destID,
+                            int timeout,
+                            byte[] password)
+                     throws JposException;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/RFIDScannerService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/RFIDScannerService113.java
new file mode 100644
index 0000000..3d2a810
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/RFIDScannerService113.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group(including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RFIDScannerService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to RFID Scanner for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//   New device category.
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface RFIDScannerService113 extends RFIDScannerService112
+{
+  // Nothing new added for release 1.13
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/RFIDScannerService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/RFIDScannerService114.java
new file mode 100644
index 0000000..ec986fe
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/RFIDScannerService114.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group(including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RFIDScannerService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to RFID Scanner for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface RFIDScannerService114 extends RFIDScannerService113
+{
+  // Nothing new added for release 1.14
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService110.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService110.java
new file mode 100644
index 0000000..13674cc
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService110.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RemoteOrderDisplayService110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Remote Order Display for release
+//   1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface RemoteOrderDisplayService110
+  extends RemoteOrderDisplayService19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService111.java
new file mode 100644
index 0000000..af36751
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RemoteOrderDisplayService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Remote Order Display for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface RemoteOrderDisplayService111 extends RemoteOrderDisplayService110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService112.java
new file mode 100644
index 0000000..21178c2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RemoteOrderDisplayService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Remote Order Display for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface RemoteOrderDisplayService112 extends RemoteOrderDisplayService111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService113.java
new file mode 100644
index 0000000..3dede5e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RemoteOrderDisplayService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Remote Order Display for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface RemoteOrderDisplayService113 extends RemoteOrderDisplayService112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService114.java
new file mode 100644
index 0000000..eec4956
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RemoteOrderDisplayService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Remote Order Display for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface RemoteOrderDisplayService114 extends RemoteOrderDisplayService113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService13.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService13.java
new file mode 100644
index 0000000..a8e801a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService13.java
@@ -0,0 +1,116 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RemoteOrderDisplayService13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Remote Order Display for release
+//   1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface RemoteOrderDisplayService13 extends BaseService
+{
+    // Capabilities
+    public int     getCapPowerReporting() throws JposException;
+    public boolean getCapSelectCharacterSet() throws JposException;
+    public boolean getCapTone() throws JposException;
+    public boolean getCapTouch() throws JposException;
+    public boolean getCapTransaction() throws JposException;
+
+    // Properties
+    public boolean getAsyncMode() throws JposException;
+    public void    setAsyncMode(boolean asyncMode) throws JposException;
+    public int     getAutoToneDuration() throws JposException;
+    public void    setAutoToneDuration(int autoToneDuration)
+                       throws JposException;
+    public int     getAutoToneFrequency() throws JposException;
+    public void    setAutoToneFrequency(int autoToneFrequency)
+                       throws JposException;
+    public int     getCharacterSet() throws JposException;
+    public String  getCharacterSetList() throws JposException;
+    public int     getClocks() throws JposException;
+    public int     getCurrentUnitID() throws JposException;
+    public void    setCurrentUnitID(int currentUnitID) throws JposException;
+    public int     getDataCount() throws JposException;
+    public boolean getDataEventEnabled() throws JposException;
+    public void    setDataEventEnabled(boolean dataEventEnabled)
+                       throws JposException;
+    public String  getErrorString() throws JposException;
+    public int     getErrorUnits() throws JposException;
+    public String  getEventString() throws JposException;
+    public int     getEventType() throws JposException;
+    public void    setEventType(int eventType) throws JposException;
+    public int     getEventUnitID() throws JposException;
+    public int     getEventUnits() throws JposException;
+    public int     getOutputID() throws JposException;
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+    public int     getSystemClocks() throws JposException;
+    public int     getSystemVideoSaveBuffers() throws JposException;
+    public int     getTimeout() throws JposException;
+    public void    setTimeout(int timeout) throws JposException;
+    public int     getUnitsOnline() throws JposException;
+    public int     getVideoDataCount() throws JposException;
+    public int     getVideoMode() throws JposException;
+    public void    setVideoMode(int videoMode) throws JposException;
+    public String  getVideoModesList() throws JposException;
+    public int     getVideoSaveBuffers() throws JposException;
+
+    // Methods
+    public void    clearInput() throws JposException;
+    public void    clearOutput() throws JposException;
+    public void    clearVideo(int units, int attribute) throws JposException;
+    public void    clearVideoRegion(int units, int row, int column, int height,
+                       int width, int attribute) throws JposException;
+    public void    controlClock(int units, int function, int clockId, int hour,
+                       int min, int sec, int row, int column, int attribute,
+                       int mode) throws JposException;
+    public void    controlCursor(int units, int function) throws JposException;
+    public void    copyVideoRegion(int units, int row, int column, int height,
+                       int width, int targetRow, int targetColumn)
+                       throws JposException;
+    public void    displayData(int units, int row, int column, int attribute,
+                       String data) throws JposException;
+    public void    drawBox(int units, int row, int column, int height,
+                       int width, int attribute, int borderType)
+                       throws JposException;
+    public void    freeVideoRegion(int units, int bufferId)
+                       throws JposException;
+    public void    resetVideo(int units) throws JposException;
+    public void    restoreVideoRegion(int units, int targetRow,
+                       int targetColumn, int bufferId) throws JposException;
+    public void    saveVideoRegion(int units, int row, int column,
+                       int height, int width, int bufferId)
+                       throws JposException;
+    public void    selectChararacterSet(int units, int characterSet)
+                       throws JposException;
+    public void    setCursor(int units, int row, int column)
+                       throws JposException;
+    public void    transactionDisplay(int units, int function)
+                       throws JposException;
+    public void    updateVideoRegionAttribute(int units, int function, int row,
+                       int column, int height, int width, int attribute)
+                       throws JposException;
+    public void    videoSound(int units, int frequency, int duration,
+                       int numberOfCycles, int interSoundWait)
+                       throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService14.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService14.java
new file mode 100644
index 0000000..158a1ae
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RemoteOrderDisplayService14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Remote Order Display for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface RemoteOrderDisplayService14 extends RemoteOrderDisplayService13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService15.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService15.java
new file mode 100644
index 0000000..e6eff99
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService15.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RemoteOrderDisplayService15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Remote Order Display for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2000-Apr-17 JavaPOS Release 1.5                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface RemoteOrderDisplayService15
+  extends RemoteOrderDisplayService14, JposServiceInstance
+{
+  // Nothing new added for release 1.5
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService16.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService16.java
new file mode 100644
index 0000000..a6bc63c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService16.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RemoteOrderDisplayService16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Remote Order Display for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2001-Apr-18 JavaPOS Release 1.6                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface RemoteOrderDisplayService16
+  extends RemoteOrderDisplayService15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService17.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService17.java
new file mode 100644
index 0000000..b412245
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService17.java
@@ -0,0 +1,38 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RemoteOrderDisplayService17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Remote Order Display for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface RemoteOrderDisplayService17
+  extends RemoteOrderDisplayService16
+{
+  // Capabilities
+  public boolean getCapMapCharacterSet() throws JposException;
+
+  // Properties
+  public boolean getMapCharacterSet() throws JposException;
+  public void    setMapCharacterSet(boolean mapCharacterSet)
+                   throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService18.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService18.java
new file mode 100644
index 0000000..c92dd4c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService18.java
@@ -0,0 +1,42 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RemoteOrderDisplayService18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Remote Order Display for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface RemoteOrderDisplayService18
+  extends RemoteOrderDisplayService17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService19.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService19.java
new file mode 100644
index 0000000..6789281
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/RemoteOrderDisplayService19.java
@@ -0,0 +1,38 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// RemoteOrderDisplayService19
+//
+//   Interface definining all new capabilities, properties and
+//                                                                 1.9
+// Modification history
+// ------------------------------------------------------------------
+//                             1.9
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface RemoteOrderDisplayService19
+  extends RemoteOrderDisplayService18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService110.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService110.java
new file mode 100644
index 0000000..999ad8f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService110.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleService110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scale for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ScaleService110
+  extends ScaleService19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService111.java
new file mode 100644
index 0000000..b967b03
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scale for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ScaleService111 extends ScaleService110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService112.java
new file mode 100644
index 0000000..4e90577
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scale for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ScaleService112 extends ScaleService111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService113.java
new file mode 100644
index 0000000..2a8cf46
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService113.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scale for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ScaleService113 extends ScaleService112
+{
+  // Properties
+  public boolean getZeroValid() throws JposException;
+  public void    setZeroValid(boolean zeroValid) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService114.java
new file mode 100644
index 0000000..8ea36db
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService114.java
@@ -0,0 +1,64 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Scale for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ScaleService114 extends ScaleService113
+{
+  // Capabilities
+  public boolean getCapFreezeValue() throws JposException;
+  public boolean getCapReadLiveWeightWithTare() throws JposException;
+  public boolean getCapSetPriceCalculationMode() throws JposException;
+  public boolean getCapSetUnitPriceWithWeightUnit() throws JposException;
+  public boolean getCapSpecialTare() throws JposException;
+  public boolean getCapTarePriority() throws JposException;
+
+  // Properties
+  public int     getMinimumWeight() throws JposException;
+
+  // Methods
+  public void    doPriceCalculating(int[]  weightValue,
+                                    int[]  tare,
+                                    long[] unitPrice,
+                                    long[] unitPriceX,
+                                    int[]  weightUnitX,
+                                    int[]  weightNumeratorX,
+                                    int[]  weightDenominatorX,
+                                    long[] price,
+                                    int    timeout) throws JposException;
+  public void    freezeValue(int     item,
+                             boolean freeze) throws JposException;
+  public void    readLiveWeightWithTare(int[] weightData,
+                                        int[] tare,
+                                        int   timeout) throws JposException;
+  public void    setPriceCalculationMode(int mode) throws JposException;
+  public void    setSpecialTare(int mode,
+                                int data) throws JposException;
+  public void    setTarePrioity(int priority) throws JposException;
+  public void    setUnitPriceWithWeightUnit(long unitPrice,
+                                            int  weightUnit,
+                                            int  weightNumerator,
+                                            int  weightDenominator) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService12.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService12.java
new file mode 100644
index 0000000..ea2536e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService12.java
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleService12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to Scale for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ScaleService12 extends BaseService
+{
+    // Capabilities
+    public boolean getCapDisplay() throws JposException;
+
+    // Properties
+    public int     getMaximumWeight() throws JposException;
+    public int     getWeightUnit() throws JposException;
+
+    // Methods
+    public void    readWeight(int[] weightData, int timeout)
+                       throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService13.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService13.java
new file mode 100644
index 0000000..9a81a2d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService13.java
@@ -0,0 +1,59 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleService13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scale for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ScaleService13 extends ScaleService12
+{
+    // Capabilities
+    public boolean getCapDisplayText() throws JposException;
+    public boolean getCapPriceCalculating() throws JposException;
+    public int     getCapPowerReporting() throws JposException;
+    public boolean getCapTareWeight() throws JposException;
+    public boolean getCapZeroScale()  throws JposException;
+
+    // Properties
+    public boolean getAsyncMode() throws JposException;
+    public void    setAsyncMode(boolean asyncMode) throws JposException;
+    public boolean getAutoDisable() throws JposException;
+    public void    setAutoDisable(boolean autoDisable) throws JposException;
+    public int     getDataCount() throws JposException;
+    public boolean getDataEventEnabled() throws JposException;
+    public void    setDataEventEnabled(boolean dataEventEnabled) throws JposException;
+    public int     getMaxDisplayTextChars() throws JposException;
+    public long    getSalesPrice() throws JposException;
+    public int     getTareWeight() throws JposException;
+    public void    setTareWeight(int tareWeight) throws JposException;
+    public long    getUnitPrice() throws JposException;
+    public void    setUnitPrice(long unitPrice) throws JposException;
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+
+    // Methods
+    public void    clearInput() throws JposException;
+    public void    displayText(String data) throws JposException;
+    public void    zeroScale() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService14.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService14.java
new file mode 100644
index 0000000..fbbd9c5
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleService14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scale for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ScaleService14 extends ScaleService13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService15.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService15.java
new file mode 100644
index 0000000..874a453
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService15.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleService15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scale for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2000-Apr-17 JavaPOS Release 1.5                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface ScaleService15
+  extends ScaleService14, JposServiceInstance
+{
+  // Nothing new added for release 1.5
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService16.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService16.java
new file mode 100644
index 0000000..0c30ba1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService16.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleService16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scale for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2001-Apr-18 JavaPOS Release 1.6                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ScaleService16
+  extends ScaleService15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService17.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService17.java
new file mode 100644
index 0000000..393c736
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService17.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleService17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scale for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ScaleService17
+  extends ScaleService16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService18.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService18.java
new file mode 100644
index 0000000..f6bf77f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService18.java
@@ -0,0 +1,42 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleService18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scale for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ScaleService18
+  extends ScaleService17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService19.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService19.java
new file mode 100644
index 0000000..5970ed7
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScaleService19.java
@@ -0,0 +1,46 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScaleService19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scale for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ScaleService19
+  extends ScaleService18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapStatusUpdate() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Properties
+  public int     getScaleLiveWeight() throws JposException;
+  public int     getStatusNotify() throws JposException;
+  public void    setStatusNotify(int statusNotify) throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService110.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService110.java
new file mode 100644
index 0000000..79672ae
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService110.java
@@ -0,0 +1,34 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerService110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scanner for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ScannerService110
+  extends ScannerService19
+{
+  // Methods
+  public void    clearInputProperties()
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService111.java
new file mode 100644
index 0000000..b4f845b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scanner for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ScannerService111 extends ScannerService110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService112.java
new file mode 100644
index 0000000..edfdd26
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scanner for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ScannerService112 extends ScannerService111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService113.java
new file mode 100644
index 0000000..23d350f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scanner for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ScannerService113 extends ScannerService112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService114.java
new file mode 100644
index 0000000..69b1631
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Scanner for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ScannerService114 extends ScannerService113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService12.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService12.java
new file mode 100644
index 0000000..b68314a
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService12.java
@@ -0,0 +1,45 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerService12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to Scanner for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ScannerService12 extends BaseService
+{
+    // Properties
+    public boolean getAutoDisable() throws JposException;
+    public void    setAutoDisable(boolean autoDisable) throws JposException;
+    public int     getDataCount() throws JposException;
+    public boolean getDataEventEnabled() throws JposException;
+    public void    setDataEventEnabled(boolean dataEventEnabled)
+                       throws JposException;
+    public boolean getDecodeData() throws JposException;
+    public void    setDecodeData(boolean decodeData) throws JposException;
+    public byte[]  getScanData() throws JposException;
+    public byte[]  getScanDataLabel() throws JposException;
+    public int     getScanDataType() throws JposException;
+
+    // Methods
+    public void    clearInput() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService13.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService13.java
new file mode 100644
index 0000000..8dfadfd
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService13.java
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerService13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scanner for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ScannerService13 extends ScannerService12
+{
+    // Capabilities
+    public int     getCapPowerReporting() throws JposException;
+
+    // Properties
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService14.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService14.java
new file mode 100644
index 0000000..44bd445
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerService14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scanner for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ScannerService14 extends ScannerService13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService15.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService15.java
new file mode 100644
index 0000000..fc98349
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService15.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerService15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scanner for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2000-Apr-17 JavaPOS Release 1.5                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface ScannerService15
+  extends ScannerService14, JposServiceInstance
+{
+  // Nothing new added for release 1.5
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService16.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService16.java
new file mode 100644
index 0000000..5e98a07
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService16.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerService16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scanner for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2001-Apr-18 JavaPOS Release 1.6                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ScannerService16
+  extends ScannerService15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService17.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService17.java
new file mode 100644
index 0000000..6cbc633
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService17.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerService17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scanner for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ScannerService17
+  extends ScannerService16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService18.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService18.java
new file mode 100644
index 0000000..0a7de6b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService18.java
@@ -0,0 +1,42 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerService18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scanner for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ScannerService18
+  extends ScannerService17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService19.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService19.java
new file mode 100644
index 0000000..fe76018
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ScannerService19.java
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ScannerService19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Scanner for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ScannerService19
+  extends ScannerService18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService110.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService110.java
new file mode 100644
index 0000000..c2612cb
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService110.java
@@ -0,0 +1,34 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCaptureService110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Signature Capture for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface SignatureCaptureService110
+  extends SignatureCaptureService19
+{
+  // Methods
+  public void    clearInputProperties()
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService111.java
new file mode 100644
index 0000000..826730d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCaptureService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Signature Capture for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface SignatureCaptureService111 extends SignatureCaptureService110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService112.java
new file mode 100644
index 0000000..4b04436
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCaptureService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Signature Capture for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface SignatureCaptureService112 extends SignatureCaptureService111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService113.java
new file mode 100644
index 0000000..7d248f9
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCaptureService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Signature Capture for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface SignatureCaptureService113 extends SignatureCaptureService112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService114.java
new file mode 100644
index 0000000..6b315e2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCaptureService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Signature Capture for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface SignatureCaptureService114 extends SignatureCaptureService113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService12.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService12.java
new file mode 100644
index 0000000..6442496
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService12.java
@@ -0,0 +1,55 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCaptureService12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to Signature Capture for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface SignatureCaptureService12 extends BaseService
+{
+    // Capabilities
+    public boolean getCapDisplay() throws JposException;
+    public boolean getCapRealTimeData() throws JposException;
+    public boolean getCapUserTerminated() throws JposException;
+
+    // Properties
+    public boolean getAutoDisable() throws JposException;
+    public void    setAutoDisable(boolean autoDisable) throws JposException;
+    public int     getDataCount() throws JposException;
+    public boolean getDataEventEnabled() throws JposException;
+    public void    setDataEventEnabled(boolean dataEventEnabled)
+                       throws JposException;
+    public int     getMaximumX() throws JposException;
+    public int     getMaximumY() throws JposException;
+    public java.awt.Point[]
+                   getPointArray() throws JposException;
+    public byte[]  getRawData() throws JposException;
+    public boolean getRealTimeDataEnabled() throws JposException;
+    public void    setRealTimeDataEnabled(boolean realTimeDataEnabled)
+                       throws JposException;
+
+    // Methods
+    public void    beginCapture(String formName) throws JposException;
+    public void    clearInput() throws JposException;
+    public void    endCapture() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService13.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService13.java
new file mode 100644
index 0000000..31ff251
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService13.java
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCaptureService13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Signature Capture for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface SignatureCaptureService13 extends SignatureCaptureService12
+{
+    // Capabilities
+    public int     getCapPowerReporting() throws JposException;
+
+    // Properties
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService14.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService14.java
new file mode 100644
index 0000000..bd03faa
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCaptureService14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Signature Capture for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface SignatureCaptureService14 extends SignatureCaptureService13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService15.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService15.java
new file mode 100644
index 0000000..dab7e67
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService15.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCaptureService14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Signature Capture for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2000-Apr-17 JavaPOS Release 1.5                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface SignatureCaptureService15
+  extends SignatureCaptureService14, JposServiceInstance
+{
+  // Nothing new added for release 1.5
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService16.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService16.java
new file mode 100644
index 0000000..627b0c1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService16.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCaptureService15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Signature Capture for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2001-Apr-18 JavaPOS Release 1.6                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface SignatureCaptureService16
+  extends SignatureCaptureService15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService17.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService17.java
new file mode 100644
index 0000000..88feb50
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService17.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCaptureService17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Signature Capture for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface SignatureCaptureService17
+  extends SignatureCaptureService16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService18.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService18.java
new file mode 100644
index 0000000..981feab
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService18.java
@@ -0,0 +1,42 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCaptureService18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Signature Capture for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface SignatureCaptureService18
+  extends SignatureCaptureService17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService19.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService19.java
new file mode 100644
index 0000000..2d094c6
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/SignatureCaptureService19.java
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SignatureCaptureService19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Signature Capture for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface SignatureCaptureService19
+  extends SignatureCaptureService18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/SmartCardRWService110.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/SmartCardRWService110.java
new file mode 100644
index 0000000..f9e79eb
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/SmartCardRWService110.java
@@ -0,0 +1,34 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SmartCardRWService110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Smart Card for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface SmartCardRWService110
+  extends SmartCardRWService19
+{
+  // Methods
+  public void    clearInputProperties()
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/SmartCardRWService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/SmartCardRWService111.java
new file mode 100644
index 0000000..5b7ddbd
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/SmartCardRWService111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SmartCardRWService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Smart Card for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface SmartCardRWService111 extends SmartCardRWService110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/SmartCardRWService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/SmartCardRWService112.java
new file mode 100644
index 0000000..24a60ae
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/SmartCardRWService112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SmartCardRWService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Smart Card for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface SmartCardRWService112 extends SmartCardRWService111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/SmartCardRWService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/SmartCardRWService113.java
new file mode 100644
index 0000000..8a67051
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/SmartCardRWService113.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SmartCardRWService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Smart Card for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface SmartCardRWService113 extends SmartCardRWService112
+{
+  // Nothing new added for release 1.13
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/SmartCardRWService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/SmartCardRWService114.java
new file mode 100644
index 0000000..933329e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/SmartCardRWService114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SmartCardRWService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Smart Card for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface SmartCardRWService114 extends SmartCardRWService113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/SmartCardRWService18.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/SmartCardRWService18.java
new file mode 100644
index 0000000..ce221e2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/SmartCardRWService18.java
@@ -0,0 +1,96 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SmartCardRWService18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Smart Card for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//   Issues reported that draft specification methods and properties
+//   were still present in the 1.8 code releases.
+//   Removed:
+//     getCapFreeMemory
+//     getCapMultipleFiles
+//     getCapSCTypes
+//     getFreeMemory
+//     getMemorySegments
+//     getSCType
+//     getTotalMemorySize
+//   Added:
+//     getCapIsoEmvMode
+//     getIsoEmvMode
+//     setIsoEmvMode
+//   Fixed:
+//     count parameter of readData is now int[] instead of int
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface SmartCardRWService18
+  extends BaseService, JposServiceInstance
+{
+  // Capabilities
+  public boolean getCapCardErrorDetection() throws JposException;
+  public int     getCapInterfaceMode() throws JposException;
+  public int     getCapIsoEmvMode() throws JposException;
+  public int     getCapPowerReporting() throws JposException;
+  public int     getCapSCPresentSensor() throws JposException;
+  public int     getCapSCSlots() throws JposException;
+  public boolean getCapStatisticsReporting() throws JposException;
+  public int     getCapTransmissionProtocol() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Properties
+  public int     getDataCount() throws JposException;
+  public boolean getDataEventEnabled() throws JposException;
+  public void    setDataEventEnabled(boolean dataEventEnabled)
+           throws JposException;
+  public int     getInterfaceMode() throws JposException;
+  public void    setInterfaceMode(int interfaceMode) throws JposException;
+  public int     getIsoEmvMode() throws JposException;
+  public void    setIsoEmvMode(int isoEmvMode) throws JposException;
+  public int     getOutputID() throws JposException;
+  public int     getPowerNotify() throws JposException;
+  public void    setPowerNotify(int powerNotify) throws JposException;
+  public int     getPowerState() throws JposException;
+  public int     getSCPresentSensor() throws JposException;
+  public int     getSCSlot() throws JposException;
+  public void    setSCSlot(int scSlot) throws JposException;
+  public boolean getTransactionInProgress() throws JposException;
+  public int     getTransmissionProtocol() throws JposException;
+
+  // Methods
+  public void    beginInsertion(int timeout) throws JposException;
+  public void    beginRemoval(int timeout) throws JposException;
+  public void    clearInput()  throws JposException;
+  public void    clearOutput()  throws JposException;
+  public void    endInsertion() throws JposException;
+  public void    endRemoval() throws JposException;
+  public void    readData(int action, int[] count, String[] data)
+                     throws JposException;
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    writeData(int action, int count, String data)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/SmartCardRWService19.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/SmartCardRWService19.java
new file mode 100644
index 0000000..5382dd4
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/SmartCardRWService19.java
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// SmartCardRWService19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Smart Card for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface SmartCardRWService19
+  extends SmartCardRWService18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService110.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService110.java
new file mode 100644
index 0000000..7f8c56d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService110.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorService110
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Tone Indicator for release 1.10.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2006-Feb-10 JavaPOS Release 1.10                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ToneIndicatorService110
+  extends ToneIndicatorService19
+{
+  // Nothing new added for release 1.10
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService111.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService111.java
new file mode 100644
index 0000000..6b01ff7
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService111.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorService111
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Tone Indicator for release 1.11.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2007-Jan-04 JavaPOS Release 1.11                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ToneIndicatorService111 extends ToneIndicatorService110
+{
+  // Nothing new added for release 1.11
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService112.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService112.java
new file mode 100644
index 0000000..36d6eb1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService112.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorService112
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Tone Indicator for release 1.12.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2008-Jan-14 JavaPOS Release 1.12                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ToneIndicatorService112 extends ToneIndicatorService111
+{
+  // Nothing new added for release 1.12
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService113.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService113.java
new file mode 100644
index 0000000..0c567b1
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService113.java
@@ -0,0 +1,38 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorService113
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Tone Indicator for release 1.13.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2009-Feb-23 JavaPOS Release 1.13                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ToneIndicatorService113 extends ToneIndicatorService112
+{
+  // Capabilities
+  public int getCapMelody() throws JposException;
+
+  // Properties
+  public int  getMelodyType() throws JposException;
+  public void setMelodyType(int melodyType) throws JposException;
+  public int  getMelodyVolume() throws JposException;
+  public void setMelodyVolume(int melodyVolume) throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService114.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService114.java
new file mode 100644
index 0000000..63bae8c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService114.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorService114
+//
+// Interface definining all capabilities, properties and methods that are
+// specific to Tone Indicator for release 1.14.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2013-Jul-25 JavaPOS Release 1.14                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ToneIndicatorService114 extends ToneIndicatorService113
+{
+  // Nothing new added for release 1.14
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService12.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService12.java
new file mode 100644
index 0000000..3c528d9
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService12.java
@@ -0,0 +1,58 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorService12
+//
+//   Interface definining all capabilities, properties and methods
+//   that are specific to Tone Indicator for release 1.2.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-02-18 JavaPOS Release 1.2                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ToneIndicatorService12 extends BaseService
+{
+    // Capabilities
+    public boolean getCapPitch() throws JposException;
+    public boolean getCapVolume() throws JposException;
+
+    // Properties
+    public boolean getAsyncMode() throws JposException;
+    public void    setAsyncMode(boolean asyncMode) throws JposException;
+    public int     getInterToneWait() throws JposException;
+    public void    setInterToneWait(int interToneWait) throws JposException;
+    public int     getOutputID() throws JposException;
+    public int     getTone1Duration() throws JposException;
+    public void    setTone1Duration(int tone1Duration) throws JposException;
+    public int     getTone1Pitch() throws JposException;
+    public void    setTone1Pitch(int tone1Pitch) throws JposException;
+    public int     getTone1Volume() throws JposException;
+    public void    setTone1Volume(int tone1Volume) throws JposException;
+    public int     getTone2Duration() throws JposException;
+    public void    setTone2Duration(int tone2Duration) throws JposException;
+    public int     getTone2Pitch() throws JposException;
+    public void    setTone2Pitch(int tone2Pitch) throws JposException;
+    public int     getTone2Volume() throws JposException;
+    public void    setTone2Volume(int tone2Volume) throws JposException;
+
+    // Methods
+    public void    clearOutput() throws JposException;
+    public void    sound(int numberOfCycles, int interSoundWait)
+                       throws JposException;
+    public void    soundImmediate() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService13.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService13.java
new file mode 100644
index 0000000..59f9bf9
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService13.java
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorService13
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Tone Indicator for release 1.3.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-04-20 JavaPOS Release 1.3                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ToneIndicatorService13 extends ToneIndicatorService12
+{
+    // Capabilities
+    public int     getCapPowerReporting() throws JposException;
+
+    // Properties
+    public int     getPowerNotify() throws JposException;
+    public void    setPowerNotify(int powerNotify) throws JposException;
+    public int     getPowerState() throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService14.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService14.java
new file mode 100644
index 0000000..e49ff52
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService14.java
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorService14
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Tone Indicator for release 1.4.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 98-11-02 JavaPOS Release 1.4                                   BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ToneIndicatorService14 extends ToneIndicatorService13
+{
+  // Nothing new added for release 1.4
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService15.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService15.java
new file mode 100644
index 0000000..49a069e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService15.java
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorService15
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Tone Indicator for release 1.5.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2000-Apr-17 JavaPOS Release 1.5                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+import jpos.loader.*;
+
+public interface ToneIndicatorService15
+  extends ToneIndicatorService14, JposServiceInstance
+{
+  // Nothing new added for release 1.5
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService16.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService16.java
new file mode 100644
index 0000000..c13da1b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService16.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorService16
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Tone Indicator for release 1.6.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2001-Apr-18 JavaPOS Release 1.6                                BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ToneIndicatorService16
+  extends ToneIndicatorService15
+{
+  // Nothing new added for release 1.6
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService17.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService17.java
new file mode 100644
index 0000000..b410fb8
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService17.java
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorService17
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Tone Indicator for release 1.7.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 01-Jul-2002 JavaPOS Release 1.7                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ToneIndicatorService17
+  extends ToneIndicatorService16
+{
+  // Nothing new added for release 1.7
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService18.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService18.java
new file mode 100644
index 0000000..e60ae2b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService18.java
@@ -0,0 +1,42 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorService18
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Tone Indicator for release 1.8.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2004-Apr-01 JavaPOS Release 1.8                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ToneIndicatorService18
+  extends ToneIndicatorService17
+{
+  // Capabilities
+  public boolean getCapStatisticsReporting() throws JposException;
+  public boolean getCapUpdateStatistics() throws JposException;
+
+  // Methods
+  public void    resetStatistics(String statisticsBuffer)
+                     throws JposException;
+  public void    retrieveStatistics(String[] statisticsBuffer)
+                     throws JposException;
+  public void    updateStatistics(String statisticsBuffer)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService19.java b/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService19.java
new file mode 100644
index 0000000..8a4a757
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/services/ToneIndicatorService19.java
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives.Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted.
+//
+// ToneIndicatorService19
+//
+//   Interface definining all new capabilities, properties and
+//   methods that are specific to Tone Indicator for release 1.9.
+//
+// Modification history
+// ------------------------------------------------------------------
+// 2005-Jan-16 JavaPOS Release 1.9                                 BS
+//
+/////////////////////////////////////////////////////////////////////
+
+package jpos.services;
+
+import jpos.*;
+
+public interface ToneIndicatorService19
+  extends ToneIndicatorService18
+{
+  // Capabilities
+  public boolean getCapCompareFirmwareVersion() throws JposException;
+  public boolean getCapUpdateFirmware() throws JposException;
+
+  // Methods
+  public void    compareFirmwareVersion(String firmwareFileName, int[] result)
+                     throws JposException;
+  public void    updateFirmware(String firmwareFileName)
+                     throws JposException;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/util/Comparable.java b/org.eclipse.osbp.fork.jpos/src/jpos/util/Comparable.java
new file mode 100644
index 0000000..fef5179
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/util/Comparable.java
@@ -0,0 +1,39 @@
+package jpos.util;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Interface defining a comparable object
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ * @version 1.2.0 (JDK 1.1.x)
+ */
+public interface Comparable
+{
+    /**
+     * Compares this and other arguments for order
+     * @param other object to compare to
+     */
+    public int compareTo( Object other );
+
+    /**
+     * Indicates this object is "equal to" the other 
+     * @param other object to compare to
+     */
+    public boolean equals( Object other );
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/util/DefaultComparableElement.java b/org.eclipse.osbp.fork.jpos/src/jpos/util/DefaultComparableElement.java
new file mode 100644
index 0000000..e6ada5e
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/util/DefaultComparableElement.java
@@ -0,0 +1,70 @@
+package jpos.util;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Default implementation of the Comparable interface
+ * <b>NOTE:</b> uses the Object's toString() method as the mean of comparison
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ * @version 1.2.0 (JDK 1.1.x)
+ */
+public class DefaultComparableElement extends Object implements Comparable
+{
+    //-------------------------------------------------------------------------
+    // Ctor
+    //
+
+    /**
+     * Default 1-argument ctor
+     * @param obj the element's Object
+     */
+    public DefaultComparableElement( Object obj ) { object = obj; }
+
+    //-------------------------------------------------------------------------
+    // Public instance methods
+    //
+
+    /**
+     * Compares this and other arguments for order
+     * @param other object to compare to
+     */
+    public int compareTo( Object other ) { return object.toString().compareTo( other.toString() ); }
+
+    /**
+     * Indicates this object is "equal to" the other 
+     * @param other object to compare to
+     */
+    public boolean equals( Object other ) { return object.toString().equals( other.toString() ); }
+
+    /** @return the Object of this Comparable element */
+    public Object getObject() { return object; }
+
+    //-------------------------------------------------------------------------
+    // Public overridden methods
+    //
+
+    /** @return a String description of this Comparable */
+    public String toString() { return object.toString(); }
+
+    //-------------------------------------------------------------------------
+    // Instance variables
+    //
+
+    private Object object = null;
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/util/DefaultProperties.java b/org.eclipse.osbp.fork.jpos/src/jpos/util/DefaultProperties.java
new file mode 100644
index 0000000..bf541fc
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/util/DefaultProperties.java
@@ -0,0 +1,673 @@
+package jpos.util;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * Default implementation of the JposProperties interface
+ * Loads/looks for the Jpos properties from the System properties and
+ * from the jpos/res/jpos.properties files
+ * NOTE: changed so that the properties are no longer loaded via the ResourceBundle
+ * class but instead though the System class
+ * @since 1.2 (NY 2K 99 meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public class DefaultProperties extends Object implements JposProperties 
+{
+    //-------------------------------------------------------------------------
+    // Public methods
+    //
+
+    /**
+     * Loads the jpos.properties file from the "./jpos/res" directory
+     * @since 1.2 (NY 2K meeting)
+     */
+    public void loadJposProperties()
+    {
+		loadJposPropertiesByName( JposProperties.JPOS_PROPERTIES_FILENAME );
+    }
+
+	/**
+	 * @return true if the properties are loaded
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public boolean isLoaded() { return loaded; }
+
+	/** 
+	 * @return the last Exception wile loading if any otherwise null 
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public Exception getLastException() { return lastException; }
+
+    /**
+     * @return the String property by name specified looking in System then the "jpos.properties" resource bundle
+     * @param propName the property name to search for
+     * @since 1.2 (NY 2K meeting)
+     */
+    public String getPropertyString( String propName )
+    {
+        String propValue = "";
+
+        if( System.getProperties().containsKey( propName ) )
+            propValue = System.getProperties().getProperty( propName );
+        else
+        if( jposProperties != null )
+            propValue = jposProperties.getProperty( propName );
+
+        return propValue;
+    }
+
+    /**
+     * @return true if this property is defined in the Java System properties or in
+     * the jpos.properties resource file
+     * @param propName the property name to look for
+     * @since 1.2 (NY 2K meeting)
+     */
+    public boolean isPropertyDefined( String propName )
+    {
+        if( System.getProperties().containsKey( propName ) )
+            return true;
+
+        if( jposProperties != null )
+        {
+            Enumeration keys = jposProperties.keys();
+
+            while( keys.hasMoreElements() )
+            {
+                String key = (String)keys.nextElement();
+
+                if( key.equals( propName ) )
+                    return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * @return an enumeration of properties names defined
+     * @since 1.2 (NY 2K meeting)
+     */
+    public Enumeration getPropertyNames() { return getJposProperties().keys(); }
+
+	/**
+	 * @return the MultiProperty by the name passed.  MultiProperty are properties
+	 * named like <propName>.<n> where n = 0, 1, ...  If the multi-property does not
+	 * exist then null is returned
+	 * @param multiPropName the multi-property name
+	 * @since 1.3 (Wahington DC 2001 meeting)
+	 */
+	public JposProperties.MultiProperty getMultiProperty( String multiPropName )
+	{ return (JposProperties.MultiProperty)multiPropMap.get( multiPropName ); }
+
+	/**
+	 * @return true if the MultiProperty by the name passed exist otherwise false
+	 * @param multiPropName the multi-property name
+	 * @since 1.3 (Wahington DC 2001 meeting)
+	 */
+	public boolean hasMultiProperty( String multiPropName )
+	{ return multiPropMap.containsKey( multiPropName ); }
+
+	/**
+	 * @return the number of properties in this JposProperties
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public int size() { return jposProperties.size(); }
+	
+    /**
+     * @return a List of property value parsed from the property value found
+     * for the property name.  The value is expected to be a list of comma 
+     * separated values
+     * @param propName the property name for which the values will be parsed from
+     * @since 2.1.0
+     */
+	public List getStringListProperty( String propName )
+	{
+		String propValue = getPropertyString( propName );
+		List list = new ArrayList();
+		
+		if( propValue == null ) return list;
+		
+		StringTokenizer st = new StringTokenizer( propValue, STRING_LIST_SEPARATOR );
+		
+		while( st.hasMoreTokens() )
+			list.add( st.nextToken() );
+		
+		return list;
+	}
+
+    //-------------------------------------------------------------------------
+    // Public overridden methods
+    //
+
+	/**
+	 * @return a formated String representation list all properties with names
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public String toString()
+	{
+		StringBuffer sb = new StringBuffer();
+
+		sb.append( "<JposProperties>\n" );
+
+        Enumeration propNames = getPropertyNames();
+
+		List list = new ArrayList();
+
+        while( propNames.hasMoreElements() )
+			list.add( propNames.nextElement() );
+
+		Collections.sort( list );
+
+		Iterator iterator = list.iterator();
+
+        while( iterator.hasNext() )
+        {
+            String propName = (String)iterator.next();
+            String propValue = (String)getPropertyString( propName );
+
+            sb.append( "<name = \"" + propName + "\"" + " value = \"" + propValue + "\" />\n" );
+        }
+
+		sb.append( "</JposProperties>\n" );
+
+		return sb.toString();
+	}
+
+    //-------------------------------------------------------------------------
+    // Public class methods
+    //
+
+	/**
+	 * @return a Comparator object to compare 2 JposProperties.Prop objects
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public static Comparator propComparator()
+	{
+		if( propComparator == null )
+			propComparator = 	new Comparator()
+								{
+									public int compare( Object o1, Object o2 ) 
+									{
+										if( !( o1 instanceof JposProperties.Prop ) ) return -1;
+										if( !( o2 instanceof JposProperties.Prop ) ) return -1;
+
+										String o1Name = ( (JposProperties.Prop)o1 ).getName();
+										String o2Name = ( (JposProperties.Prop)o2 ).getName();
+
+										return o1Name.compareTo( o2Name );
+									}
+								};
+
+
+		return propComparator;
+	}
+
+	/**
+	 * @return an Iterator of valid property names
+	 * @since 1.3 (Washington DC 2001)
+	 */
+	public static Iterator getDefinedPropertyNames()
+	{
+		List list = new ArrayList();
+
+		for( int i = 0; i < PROP_NAME_ARRAY.length; ++i )
+			list.add( PROP_NAME_ARRAY[ i ] );
+
+		return list.iterator();
+	}
+
+    //-------------------------------------------------------------------------
+    // Protected methods
+    //
+
+	/**
+	 * Creates the set of MultiProperty from the loaded properties
+     * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	protected void createMultiProperties()
+	{
+		Enumeration propNames = jposProperties.keys();
+
+		while( propNames.hasMoreElements() )
+		{
+			String propName = (String)propNames.nextElement();
+			String propValue = (String)jposProperties.get( propName );
+
+			if( isMultiProp( propName ) )
+			{
+				String multiPropBaseName = getMultiPropBaseName( propName );
+				if( multiPropMap.containsKey( multiPropBaseName ) )
+				{
+					MultiProp multiProp = (MultiProp)multiPropMap.get( multiPropBaseName );
+					multiProp.add( propName, propValue );
+				}
+				else
+				{
+					MultiProp multiProp = this.new MultiProp( multiPropBaseName );
+					multiProp.add( propName, propValue );
+					multiPropMap.put( multiPropBaseName, multiProp );
+				}
+			}
+		}
+	}
+
+	/** 
+	 * @return true if the propName passed is a multi-property
+	 * @param propName the property name 
+     * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	protected boolean isMultiProp( String propName )
+	{
+		if( propName.indexOf( "." ) == -1 )
+			return false;
+
+		int dotIndex = propName.lastIndexOf( "." );
+
+		String numberString = propName.substring( dotIndex + 1 );
+		int number = -1;
+
+		try{ number = Integer.parseInt( numberString ); }
+		catch( NumberFormatException nfe ) { number = -1; }
+
+		if( number < 0 ) return false;
+
+		return true;
+	}
+
+	/**
+	 * @return the base name of the multi-property that the propName belongs to
+	 * @param propName the multi-property name 
+     * @since 1.3 (Washington DC 2001 meeting)
+	 * @throws java.lang.IllegalArgumentException if the argument is not a multi-property
+	 */
+	protected String getMultiPropBaseName( String propName ) throws IllegalArgumentException
+	{
+		if( !isMultiProp( propName ) )
+			throw new IllegalArgumentException( "getMultiPropBaseName( propName ) expects a propName that is a MuliProp" );
+
+		return propName.substring( 0, propName.lastIndexOf( "." ) );
+	}
+
+	/**
+	 * @return an iterator of JposProperties.Prop for all the properties in this
+	 * JposProperties.  Changes to these properties do not affect the JposProperties properties
+	 * @see jpos.util.JposProperties.Prop
+	 * @since 1.3 (Washington DC 2001)
+	 */
+	public Iterator getProps()
+	{
+		List list = new ArrayList();
+
+		Enumeration names = getPropertyNames();
+		while( names.hasMoreElements() )
+		{
+			String name = (String)names.nextElement();
+			String value = getPropertyString( name );
+
+			JposProperties.Prop prop = new DefaultProperties.Prop( name, value );
+			list.add( prop );
+		}
+
+		return list.iterator();
+	}
+
+    //-------------------------------------------------------------------------
+    // Package methods
+    //
+
+    /**
+     * Loads the JposProperties from the fileName specified
+     * @since 1.3 (Washington DC 2001 meeting)
+     */
+    void loadJposPropertiesByName( String propFileName )
+    {
+		loaded = false;
+		lastException = null;
+
+		jposProperties = findProperties( propFileName );
+
+		createMultiProperties();
+    }
+
+	/**
+	 * @return the properties file name that was loaded or "" if none was loaded
+	 * @since 1.3 (Washington DC 20001 meeting)
+	 */
+	String getLoadedPropFileName() { return loadedPropFileName; }
+
+    /**
+     * @return the jposProerties loading it if necessary
+	 * @since 1.3 (SF-2K meeting)
+     */
+    Properties getJposProperties()
+    {
+        if( jposProperties == null )
+            loadJposProperties();
+
+        return jposProperties;
+    }
+
+    /**
+     * @return a Properties object loaded with the properties file passed
+     * Looks for the properties file in the current set JAR or Zip files
+     * @param propFileName the properties file name
+	 * @since 1.3 (SF-2K meeting)
+     */
+    Properties findProperties( String propFileName )
+    {
+        Properties properties = new Properties();
+        loadedPropFileName = propFileName;
+
+		InputStream is = getClass().getClassLoader().getResourceAsStream( loadedPropFileName );
+
+        if( is != null ) 
+        {
+            is = new BufferedInputStream( is );
+
+            try 
+            {
+                properties.load( is );
+                loaded = true;
+            }
+            catch( Exception e ) 
+            {
+                loaded = false;
+				loadedPropFileName = "";
+                lastException = e;
+            }
+            finally 
+            {
+                try{ is.close(); }
+                catch( Exception e ) 
+				{ System.err.println( "Unexpected exception while closing stream Exception.message = " + e.getMessage() ); }
+            }
+        }
+        else
+        {
+            loaded = false;
+            System.err.println( propFileName + " file not found" );
+        }
+
+        return properties;
+    }
+
+    //-------------------------------------------------------------------------
+    // Private instance variables
+    //
+
+    private Properties jposProperties = null;
+	private HashMap multiPropMap = new HashMap();
+
+	private String loadedPropFileName = "";
+
+	private boolean loaded = false;
+	private Exception lastException = null;
+
+    //-------------------------------------------------------------------------
+    // Class variables
+    //
+
+	private static Comparator propComparator = null;
+
+	//-------------------------------------------------------------------------
+	// Inner classes
+	//
+
+	/**
+	 * Default implementation of the jpos.util.JposProperties interface
+	 * Speficies an interface used for returning multi properties.  That is
+	 * properties that are named like <name>.x where x = 0, 1, ...x
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	class MultiProp extends Object implements JposProperties.MultiProperty
+	{
+		//---------------------------------------------------------------------
+		// Ctor(s)
+		//
+
+		/**
+		 * Creates a DefaultMultiProp with base prop name passed
+		 * @param s the String base prop name
+		 */
+		MultiProp( String s )
+		{
+			basePropName = s;
+		}
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** 
+		 * @return the base property name for this multi-property that is the
+		 * name w/o the number suffix
+		 */
+		public String getBasePropertyName() { return basePropName; }
+
+		/** @return an iterator of the property names for this multi-property */
+		public Iterator getPropertyNames() { return propMap.keySet().iterator(); }
+
+		/** @return an iterator of the property names alphabetically sorted for this multi-property */
+		public Iterator getSortedPropertyNames() 
+		{ 
+			List namesList = new ArrayList( propMap.keySet() );
+
+			Collections.sort( namesList );
+
+			return namesList.iterator();
+		}
+
+		/** @return an iterator of the property values for this multi-property */
+		public Iterator getPropertyValues() { return propMap.values().iterator(); }
+
+		/**
+		 * @return the value for this property from the full property name
+		 * @param propName the full property name <name>.x
+		 */
+		public String getPropertyString( String propName )
+		{ return (String)propMap.get( propName ); }
+
+		/**
+		 * @return the value for this property from the full property name
+		 * @param number suffix for the property name
+		 * @throws java.lang.IllegalArgumentException if the i negative
+		 */
+		public String getPropertyString( int i ) throws IllegalArgumentException
+		{
+			if( i < 0 )
+				throw new IllegalArgumentException( "Cannot find property in multiprop with number i = " + i );
+
+			return getPropertyString( getBasePropertyName() + "." + i ); 
+		}															
+
+		/** @return the number of properties defined in this multi-property */
+		public int getNumberOfProperties() { return propMap.size(); }
+
+		/** 
+		 * @return the number of this property name that is for property <propName>.x returns x 
+		 * @param propName the property name to get the number of
+		 * @throws java.lang.IllegalArgumentException if the property name does not follow the <propName>.x name pattern
+		 */
+		public int propertyNumber( String propName ) throws IllegalArgumentException
+		{
+			return validatePropName( propName );
+		}
+
+		//---------------------------------------------------------------------
+		// Package methods
+		//
+
+		/** 
+		 * Validates that propName passed is valid for this multi-prop
+		 * @return the number of this property
+		 * @throws java.lang.IllegalArgumentException if propName is not valid
+		 */
+		int validatePropName( String propName ) throws IllegalArgumentException
+		{
+			if( !propName.startsWith( getBasePropertyName() + "." ) )
+				throw new IllegalArgumentException( "propName = " + propName + " passed does not match base prop name of " + getBasePropertyName() );
+
+			if( propName.endsWith( "." ) )
+				throw new IllegalArgumentException( "propName = " + propName + " passed must end with a pattern .<number>" );
+
+			String numberString = propName.substring( propName.lastIndexOf( "." ) + 1 );
+
+			int number = 0;
+
+			try{ number = Integer.parseInt( numberString ); }
+			catch( NumberFormatException nfe )
+			{ throw new IllegalArgumentException( "propName = " + propName + " passed must end with a pattern .<number>" ); }
+
+			return number;
+		}
+
+		/**
+		 * Adds a new <propName, propValue> to this multi property
+		 * @param propName the property name
+		 * @param propValue the property value
+		 * @throws java.lang.IllegalArgumentException if the propName does not match the base prop name
+		 */
+		void add( String propName, String propValue ) throws IllegalArgumentException
+		{
+			validatePropName( propName );
+			propMap.put( propName, propValue );
+		}
+
+		/**
+		 * Removes existing property by name propName.  If property does not exist does nothing
+		 * @return the propValue of the property removed or null if not found
+		 * @param propName the property name
+		 */
+		String remove( String propName ) { return (String)propMap.remove( propName ); }
+
+		//---------------------------------------------------------------------
+		// Instance variables
+		//
+
+		private String basePropName = "";
+		private HashMap propMap = new HashMap();
+	}
+
+	/**
+	 * Simple wrapper class for a property pair <name, value>
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 * @since 1.3 (Washington DC 2001)
+	 */
+	public static class Prop extends Object implements JposProperties.Prop
+	{
+		//---------------------------------------------------------------------
+		// Ctor
+		//
+
+		/**
+		 * Creates a new Prop with name and value passed
+		 * @param name this prop's name
+		 * @param value this prop's value
+		 */
+		public Prop( String name, String value )
+		{
+			this.name = name;
+			this.value = value;
+		}
+
+		//---------------------------------------------------------------------
+		// Public methods
+		//
+
+		/** @return the name of this property */
+		public String getName() { return name; }
+
+		/** @return the value of this property */
+		public String getValue() { return value; }
+
+		/**
+		 * Sets the value of this property 
+		 * @param s the new prop name
+		 */
+		public void setName( String s ) { name = s; }
+
+		/** 
+		 * Sets the value of this property 
+		 * @param s the name String
+		 */
+		public void setValue( String s ) { value = s; }
+
+		/**
+		 * @return 0 if 2 objects same -1 if this is less or +1 if this is more than other
+		 * @param other the other object to compare against this
+		 */
+		public int compareTo( JposProperties.Prop other )
+		{
+			if( other == null ) return -1;
+
+			return getName().compareTo( ( (JposProperties.Prop)other ).getName() );
+		}
+
+		/**
+		 * @return 0 if 2 objects same -1 if this is less or +1 if this is more than other
+		 * @param other the other object to compare against this
+		 */
+		public int compareTo( Object other )
+		{
+			return compareTo( (JposProperties.Prop)other );
+		}
+
+		//---------------------------------------------------------------------
+		// Public overridden methods
+		//
+
+		/**
+		 * @return true if this is logically equivalent to the other Prop
+		 * @param otherProp the other Prop object
+		 */
+		public boolean equals( Object otherProp )
+		{
+			if( otherProp == null ) return false;
+
+			if( !( otherProp instanceof JposProperties.Prop ) ) return false;
+
+			JposProperties.Prop prop = (JposProperties.Prop)otherProp;
+
+			return ( getName().equals( prop.getName() ) && getValue().equals( prop.getValue() ) );
+		}
+
+		/** @return a String representation of this property */
+		public String toString()
+		{
+			return "<name = " + getName() + ", value = " + getValue() + ">";
+		}
+
+		//---------------------------------------------------------------------
+		// Instance variables
+		//
+
+		private String name = "";
+		private String value = "";
+	}
+	
+	//-------------------------------------------------------------------------
+	// Public static constants
+	//
+	
+	public static final String STRING_LIST_SEPARATOR = ",";
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/util/FileUtil.java b/org.eclipse.osbp.fork.jpos/src/jpos/util/FileUtil.java
new file mode 100644
index 0000000..50cf457
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/util/FileUtil.java
@@ -0,0 +1,274 @@
+package jpos.util;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.List;
+import java.util.LinkedList;
+import java.util.Enumeration;
+import java.util.StringTokenizer;
+
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+
+import jpos.util.tracing.Tracer;
+import jpos.util.tracing.TracerFactory;
+
+/**
+ * Utility class for various File related actions and methods
+ * @author E. Michael Maximilien
+ * @version 0.0.1
+ * @since 2.1.0
+ */
+public class FileUtil extends Object
+{	
+    //-------------------------------------------------------------------------
+    // Ctor(s)
+    //
+	
+	/** Make ctor protected to avoid contruction but allows subclassing */
+	protected FileUtil() {}
+
+    //-------------------------------------------------------------------------
+    // Private/protected static methods
+    //
+
+	protected synchronized static List getCpDirList()
+	{
+		String classpath = System.getProperty( "java.class.path" );								
+		
+		List cpDirList = new LinkedList();
+		
+		StringTokenizer st = new StringTokenizer( classpath, File.pathSeparator );
+		while( st.hasMoreTokens() )
+		{
+			String cpEntry = st.nextToken();
+			
+			if( cpEntry.toLowerCase().endsWith( "jar" ) ||
+			    cpEntry.toLowerCase().endsWith( "zip" ) )
+			    cpDirList.add( cpEntry.
+			    			   substring( 0, cpEntry.
+			    			   				 lastIndexOf( File.separator ) ) );
+			else
+				cpDirList.add( cpEntry );
+		}
+
+		return cpDirList;
+	}
+	
+	protected synchronized static List getJarList()
+	{
+		String classpath = System.getProperty( "java.class.path" );
+								
+		List cpJarFilesList = new LinkedList();
+		
+		StringTokenizer st = new StringTokenizer( classpath, File.pathSeparator );
+		while( st.hasMoreTokens() )
+		{
+			String cpEntry = st.nextToken();
+			
+			if( cpEntry.toLowerCase().endsWith( "jar" ) ||
+			    cpEntry.toLowerCase().endsWith( "zip" ) )
+			    cpJarFilesList.add( cpEntry );
+		}
+
+		return cpJarFilesList;		
+	}
+	
+	protected synchronized static JarEntry getJarEntry( JarFile jarFile, String fileName )
+	{
+		tracer.println( "<getJarEntry jarFile=" + jarFile + " fileName=" + 
+						fileName + ">" );
+		
+		if( jarFile == null ) return null;
+		
+		Enumeration entries = jarFile.entries();
+		while( entries.hasMoreElements() )
+		{
+			JarEntry jarEntry = (JarEntry)entries.nextElement();
+									
+			if( jarEntry.getName().equals( fileName ) ) 
+			{
+				tracer.println( "jarEntry.getName()=" + jarEntry.getName() );
+				return jarEntry;
+			}
+		}
+
+		tracer.println( "<message>Could not find JarEntry with fileName=" + 
+						 fileName +"</message>" );		
+		tracer.println( "</getJarEntry>" );
+		
+		return null;
+	}
+    	
+    /** 
+     * @return the File object if found otherwise returns null
+	 * @param fileName the relative fileName to search for
+	 * @param searchInClassPath if true the file will be searched in all 
+	 * directories specified by CLASSPATH
+     */
+    protected synchronized static JarFile lookForFileInJars( String fileName )
+	{
+		try
+		{
+			tracer.println( "<lookForFileInJars fileName="+fileName +">" );
+			
+			String classpath = System.getProperty( "java.class.path" );
+
+			tracer.println( "classpath="+classpath );
+						
+			List cpJarFilesList = getJarList();
+			List cpDirList = getCpDirList();
+						
+			for( int i = 0; i < cpJarFilesList.size(); ++i )
+			{
+				String jarFileName = (String)cpJarFilesList.get( i );
+				
+				tracer.println( "jarFileName=" + jarFileName );
+		
+				JarFile jarFile = new JarFile( new File( jarFileName ) );
+
+				JarEntry jarEntry = getJarEntry( jarFile, fileName );
+				
+				if( jarEntry != null ) return jarFile;
+			}
+						
+			return null;
+		}
+		catch( Exception ioe ) { return null; }
+		finally
+		{
+			tracer.println( "</lookForFileInJars>" );
+		}
+	}	
+	
+    //-------------------------------------------------------------------------
+    // Public static methods
+    //
+
+	/**
+	 * @return true if the File passed by name below could be located by
+	 * searching the classpath and or JAR files in CLASSPATH
+	 * @param fileName the relative fileName to search for
+	 * @param searchInClassPath if true the file will be searched in all 
+	 * directories specified by CLASSPATH
+	 * @param searchInJarFile if true the file will be searched in all the JAR
+	 * files that are located in CLASSPATH
+	 */
+	public synchronized static boolean 
+	locateFile( String fileName, boolean searchInClassPath, 
+	            boolean searchInJarFile )
+	{
+		File file = findFile( fileName, searchInClassPath );
+		
+		if( file != null ) return true;
+		
+		if( searchInJarFile )
+		{
+			JarFile jarFile = lookForFileInJars( fileName );
+			
+			if( jarFile != null ) return true;
+		}
+		
+		return false;
+	}
+
+    /** 
+     * @return the File object if found otherwise returns null
+	 * @param fileName the relative fileName to search for
+	 * @param searchInClassPath if true the file will be searched in all 
+	 * directories specified by CLASSPATH
+     */
+    public synchronized static File findFile( String fileName, 
+    											 boolean searchInClassPath )
+	{
+		try
+		{
+			File file = new File( fileName );
+			if( file.exists() ) return file;
+			
+			List cpJarFilesList = getJarList();
+			List cpDirList = getCpDirList();
+						
+			if( searchInClassPath )
+				for( int i = 0; i < cpDirList.size(); ++i )
+				{
+					String path = (String)cpDirList.get( i );
+					File file2 = new File( path + File.separator + fileName );
+	
+					if( file2.exists() ) return file2;
+				}
+						
+			return null;
+		}
+		catch( Exception ioe ) { return null; }
+	}	                                            
+
+	/**
+	 * @return a FileIOStream object for the file passed by name below could 
+	 * be located by searching the classpath and or JAR files in CLASSPATH
+	 * @param fileName the relative fileName to search for
+	 * @param searchInClassPath if true the file will be searched in all 
+	 * directories specified by CLASSPATH
+	 * @param searchInJarFile if true the file will be searched in all the JAR
+	 * files that are located in CLASSPATH
+	 * @throws java.io.FileNotFoundException if the file could not be found
+	 * @throws java.io.IOException if an error occurred while loading file
+	 */
+	public synchronized static InputStream 
+	loadFile( String fileName, boolean searchInClassPath, 
+	          boolean searchInJarFile ) 
+	throws FileNotFoundException, IOException
+	{	    
+		tracer.println( "<loadFile fileName=" + fileName + " searchInClassPath=" + 
+						searchInClassPath + " searchInJarFile=" + 
+						searchInJarFile + ">" );
+		
+		File locatedFile = findFile( fileName, searchInClassPath );
+		
+		if( locatedFile != null ) return new FileInputStream( locatedFile );
+
+		if( locatedFile == null && searchInJarFile == false ) 
+			throw new FileNotFoundException( "Could not find file: " + fileName );
+		
+		JarFile locatedJarFile = lookForFileInJars( fileName );
+		
+		if( locatedJarFile == null ) 
+			throw new FileNotFoundException( "Could not find file: " + fileName );
+		
+		JarEntry locatedJarEntry = getJarEntry( locatedJarFile, fileName );
+
+		if( locatedJarEntry != null )
+			return locatedJarFile.getInputStream( locatedJarEntry );
+		
+		throw new FileNotFoundException( "Could not find file: " + fileName );
+	}
+	
+	//-------------------------------------------------------------------------
+	// Class variables
+	//
+	
+	private static Tracer tracer = TracerFactory.getInstance().
+									 createTracer( "FileUtil" );
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/util/JposEntryUtility.java b/org.eclipse.osbp.fork.jpos/src/jpos/util/JposEntryUtility.java
new file mode 100644
index 0000000..9511658
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/util/JposEntryUtility.java
@@ -0,0 +1,481 @@
+package jpos.util;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.util.*;
+
+import jpos.config.JposEntry;
+import jpos.config.JposEntryConst;
+import jpos.config.JposConfigException;
+import jpos.config.simple.SimpleEntry;
+
+/**
+ * Simple class used to validate JposEntry objects
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ * @since 1.3 (Tokyo 2001 meeting)
+ * @version 1.3.0
+ */
+public class JposEntryUtility extends Object
+{
+	//-------------------------------------------------------------------------
+	// Ctor(s)
+	//
+
+	/** Make ctor private (utility class) */
+	private JposEntryUtility() {}
+
+	//-------------------------------------------------------------------------
+	// Public class mehods
+	//
+
+    /**
+     * @return true if this entry is valid with all required properties
+     * @param jposEntry the entry to validate
+     */
+    public static boolean isValidJposEntry( JposEntry jposEntry )
+    {
+        boolean valid = false;
+
+        if( jposEntry.hasPropertyWithName( JposEntry.LOGICAL_NAME_PROP_NAME ) &&
+            jposEntry.hasPropertyWithName( JposEntry.SI_FACTORY_CLASS_PROP_NAME ) &&
+            jposEntry.hasPropertyWithName( JposEntry.SERVICE_CLASS_PROP_NAME ) &&
+            jposEntry.hasPropertyWithName( JposEntry.DEVICE_CATEGORY_PROP_NAME ) &&
+            jposEntry.hasPropertyWithName( JposEntry.JPOS_VERSION_PROP_NAME ) &&
+            jposEntry.hasPropertyWithName( JposEntry.VENDOR_NAME_PROP_NAME ) &&
+            jposEntry.hasPropertyWithName( JposEntry.VENDOR_URL_PROP_NAME ) &&
+            jposEntry.hasPropertyWithName( JposEntry.PRODUCT_NAME_PROP_NAME ) &&
+            jposEntry.hasPropertyWithName( JposEntry.PRODUCT_URL_PROP_NAME ) &&
+            jposEntry.hasPropertyWithName( JposEntry.PRODUCT_DESCRIPTION_PROP_NAME ) )
+            valid = true;
+
+        return valid;
+    }
+
+    /**
+     * @return true if the property name passed is a required property
+     * @param name the property name
+     */
+    public static boolean isRequiredPropName( String name )
+    {
+        boolean valid = false;
+
+        if( name.equals( JposEntry.LOGICAL_NAME_PROP_NAME ) ||
+            name.equals( JposEntry.SI_FACTORY_CLASS_PROP_NAME ) ||
+            name.equals( JposEntry.SERVICE_CLASS_PROP_NAME ) ||
+            name.equals( JposEntry.DEVICE_CATEGORY_PROP_NAME ) ||
+            name.equals( JposEntry.JPOS_VERSION_PROP_NAME ) ||
+            name.equals( JposEntry.VENDOR_NAME_PROP_NAME ) ||
+            name.equals( JposEntry.VENDOR_URL_PROP_NAME ) ||
+            name.equals( JposEntry.PRODUCT_NAME_PROP_NAME ) ||
+            name.equals( JposEntry.PRODUCT_URL_PROP_NAME ) ||
+            name.equals( JposEntry.PRODUCT_DESCRIPTION_PROP_NAME ) )
+            valid = true;
+
+        return valid;
+    }
+
+    /**
+     * @return true if the property name passed is a RS232 property
+     * @param name the property name
+     */
+    public static boolean isRS232PropName( String name )
+    {
+        boolean valid = false;
+        
+		if( name.equals( JposEntryConst.RS232_PORT_NAME_PROP_NAME ) ||
+            name.equals( JposEntryConst.RS232_BAUD_RATE_PROP_NAME ) ||
+            name.equals( JposEntryConst.RS232_DATA_BITS_PROP_NAME ) ||
+            name.equals( JposEntryConst.RS232_PARITY_PROP_NAME ) ||
+            name.equals( JposEntryConst.RS232_STOP_BITS_PROP_NAME ) ||
+            name.equals( JposEntryConst.RS232_FLOW_CONTROL_PROP_NAME ) )
+			valid = true;
+
+        return valid;
+    }
+
+	/**
+	 * Removes all RS232 specific utilities from this JposEntry
+	 * @param jposEntry the JposEntry to modify
+	 */
+	public static void removeAllRS232Props( JposEntry jposEntry )
+	{
+		jposEntry.removeProperty( JposEntryConst.RS232_PORT_NAME_PROP_NAME );
+		jposEntry.removeProperty( JposEntryConst.RS232_BAUD_RATE_PROP_NAME );
+		jposEntry.removeProperty( JposEntryConst.RS232_DATA_BITS_PROP_NAME );
+		jposEntry.removeProperty( JposEntryConst.RS232_PARITY_PROP_NAME );
+		jposEntry.removeProperty( JposEntryConst.RS232_STOP_BITS_PROP_NAME );
+		jposEntry.removeProperty( JposEntryConst.RS232_FLOW_CONTROL_PROP_NAME );
+	}
+	 
+
+	/** @return an Iterator of all the standard property names */
+	public static Iterator getStandardPropNames() { return STANDARD_PROP_NAMES_LIST.iterator(); }
+
+	/**
+	 * @return a enumeration of all non-required property names from the jposEntry
+	 * @param jposEntry the JposEntry
+	 */
+	public static Enumeration getNonRequiredPropNames( JposEntry jposEntry )
+	{
+		Vector vector = new Vector();
+
+		Enumeration names = jposEntry.getPropertyNames();
+		while( names.hasMoreElements() )
+		{
+			String name = (String)names.nextElement();
+
+			if( isRequiredPropName( name ) == false )
+				vector.add( name );
+		}
+
+		return vector.elements();
+	}
+
+    /**
+     * @return an Enumeration of property names that are required but missing
+	 * from the JposEntry object passed
+     * @param jposEntry the entry to validate
+     */
+    public static Enumeration getMissingRequiredPropNames( JposEntry jposEntry )
+    {
+		Vector vector = new Vector();
+
+        if( !jposEntry.hasPropertyWithName( JposEntry.LOGICAL_NAME_PROP_NAME ) )
+			vector.add( JposEntry.LOGICAL_NAME_PROP_NAME );
+
+		if( !jposEntry.hasPropertyWithName( JposEntry.SI_FACTORY_CLASS_PROP_NAME ) )
+			vector.add( JposEntry.SI_FACTORY_CLASS_PROP_NAME );
+
+		if( !jposEntry.hasPropertyWithName( JposEntry.SERVICE_CLASS_PROP_NAME ) )
+			vector.add( JposEntry.SERVICE_CLASS_PROP_NAME );
+
+		if( !jposEntry.hasPropertyWithName( JposEntry.DEVICE_CATEGORY_PROP_NAME ) )
+			vector.add( JposEntry.DEVICE_CATEGORY_PROP_NAME );
+
+		if( !jposEntry.hasPropertyWithName( JposEntry.JPOS_VERSION_PROP_NAME ) )
+			vector.add( JposEntry.JPOS_VERSION_PROP_NAME );
+
+		if( !jposEntry.hasPropertyWithName( JposEntry.VENDOR_NAME_PROP_NAME ) )
+			vector.add( JposEntry.VENDOR_NAME_PROP_NAME );
+
+		if( !jposEntry.hasPropertyWithName( JposEntry.VENDOR_URL_PROP_NAME )  )
+			vector.add( JposEntry.VENDOR_URL_PROP_NAME );
+
+		if( !jposEntry.hasPropertyWithName( JposEntry.PRODUCT_NAME_PROP_NAME )  )
+			vector.add( JposEntry.PRODUCT_NAME_PROP_NAME );
+
+		if( !jposEntry.hasPropertyWithName( JposEntry.PRODUCT_URL_PROP_NAME )  )
+			vector.add( JposEntry.PRODUCT_URL_PROP_NAME );
+
+		if( !jposEntry.hasPropertyWithName( JposEntry.PRODUCT_DESCRIPTION_PROP_NAME ) )
+			vector.add( JposEntry.PRODUCT_DESCRIPTION_PROP_NAME );
+
+        return vector.elements();
+    }
+
+    /**
+     * @return an Enumeration of all RS232 property names that are missing
+	 * from the JposEntry object passed
+     * @param jposEntry the entry to validate
+     */
+    public static Enumeration getMissingRS232PropNames( JposEntry jposEntry )
+    {
+		Vector vector = new Vector();
+
+        if( !jposEntry.hasPropertyWithName( JposEntryConst.RS232_PORT_NAME_PROP_NAME ) )
+			vector.add( JposEntryConst.RS232_PORT_NAME_PROP_NAME );
+
+		if( !jposEntry.hasPropertyWithName( JposEntryConst.RS232_BAUD_RATE_PROP_NAME ) )
+			vector.add( JposEntryConst.RS232_BAUD_RATE_PROP_NAME );
+
+		if( !jposEntry.hasPropertyWithName( JposEntryConst.RS232_DATA_BITS_PROP_NAME ) )
+			vector.add( JposEntryConst.RS232_DATA_BITS_PROP_NAME );
+
+		if( !jposEntry.hasPropertyWithName( JposEntryConst.RS232_PARITY_PROP_NAME ) )
+			vector.add( JposEntryConst.RS232_PARITY_PROP_NAME );
+
+		if( !jposEntry.hasPropertyWithName( JposEntryConst.RS232_STOP_BITS_PROP_NAME ) )
+			vector.add( JposEntryConst.RS232_STOP_BITS_PROP_NAME );
+
+		if( !jposEntry.hasPropertyWithName( JposEntryConst.RS232_FLOW_CONTROL_PROP_NAME ) )
+			vector.add( JposEntryConst.RS232_FLOW_CONTROL_PROP_NAME );
+
+        return vector.elements();
+    }
+
+	/**
+	 * @return an Enumeration of all non-standard properties, that is vendor properties
+	 * @param jposEntry the JposEntry to find the vendor property names from
+	 */
+	public static Enumeration getVendorPropNames( JposEntry jposEntry )
+	{
+		Vector vector = new Vector();
+
+		Enumeration propNames = jposEntry.getPropertyNames();
+		while( propNames.hasMoreElements() )
+			vector.add( propNames.nextElement() );
+
+		Iterator standardPropNames = getStandardPropNames();
+
+		while( standardPropNames.hasNext() )
+		{
+			String name = (String)standardPropNames.next();
+			vector.remove( name );
+		}
+
+		return vector.elements();
+	}
+
+    /**
+     * Add defaults all required properties that are missing from this JposEntry
+     * @param jposEntry the JposEntry object
+     */
+	public static void addMissingRequiredProps( JposEntry jposEntry )
+	{
+		Enumeration missingPropNames = getMissingRequiredPropNames( jposEntry );
+
+		JposEntry prototype = getEntryPrototype();
+
+		while( missingPropNames.hasMoreElements() )
+		{
+			String propName = (String)missingPropNames.nextElement();
+			jposEntry.addProperty( propName, prototype.getPropertyValue( propName ) );
+		}
+	}																				  
+
+	/**
+	 * @return a prototypical instance of a JposEntry with all required properties set to
+	 * their default values
+	 */
+	public static JposEntry getEntryPrototype()
+	{
+		if( prototypeJposEntry == null )
+		{
+			prototypeJposEntry = new SimpleEntry();
+
+			prototypeJposEntry.addProperty( JposEntry.LOGICAL_NAME_PROP_NAME, JposEntryConst.LOGICAL_NAME_DEFAULT_PROP_VALUE );
+			prototypeJposEntry.addProperty( JposEntry.SI_FACTORY_CLASS_PROP_NAME, JposEntryConst.SI_FACTORY_CLASS_DEFAULT_PROP_VALUE );
+			prototypeJposEntry.addProperty( JposEntry.SERVICE_CLASS_PROP_NAME, JposEntryConst.SERVICE_CLASS_DEFAULT_PROP_VALUE );
+			prototypeJposEntry.addProperty( JposEntry.DEVICE_CATEGORY_PROP_NAME, JposEntryConst.DEVICE_CATEGORY_DEFAULT_PROP_VALUE );
+			prototypeJposEntry.addProperty( JposEntry.JPOS_VERSION_PROP_NAME, JposEntryConst.JPOS_VERSION_DEFAULT_PROP_VALUE );
+			prototypeJposEntry.addProperty( JposEntry.VENDOR_NAME_PROP_NAME, JposEntryConst.VENDOR_NAME_DEFAULT_PROP_VALUE );
+			prototypeJposEntry.addProperty( JposEntry.VENDOR_URL_PROP_NAME, JposEntryConst.VENDOR_URL_DEFAULT_PROP_VALUE );
+			prototypeJposEntry.addProperty( JposEntry.PRODUCT_NAME_PROP_NAME, JposEntryConst.PRODUCT_NAME_DEFAULT_PROP_VALUE );
+			prototypeJposEntry.addProperty( JposEntry.PRODUCT_URL_PROP_NAME, JposEntryConst.PRODUCT_URL_DEFAULT_PROP_VALUE );
+			prototypeJposEntry.addProperty( JposEntry.PRODUCT_DESCRIPTION_PROP_NAME, JposEntryConst.PRODUCT_DESCRIPTION_DEFAULT_PROP_VALUE );
+		}
+
+		return ( (SimpleEntry)prototypeJposEntry ).copy();
+	}
+
+	/**
+	 * @return the short name of the Class object passed, that is return the name of the class
+	 * w/o the package name
+	 * @param classObject the Class object
+	 * @since 2.0.0
+	 */
+	public static String shortClassName( Class classObject )
+	{ return classObject.toString().substring( classObject.toString().lastIndexOf( "." ) + 1 ); }
+
+	/** 
+	 * @return true if the Object passed is a valid JposEntry property value of the type passed
+	 * @param propValue the property value object
+	 * @param propType the property type object
+	 * @see jpos.config.JposEntryConst#PROP_TYPES
+	 * @since 2.0.0
+	 */
+	public static boolean validatePropValue( Object propValue, Class propType )
+	{
+		if( propValue == null || propType == null ) return false;
+
+		if( !isValidPropType( propType ) ) return false;
+
+		return propType.isInstance( propValue );
+	}
+
+	/**
+	 * @return true if the propType object passed is a valid JposEntry property type
+	 * that is one of the JposEntryConst.PROP_TYPES
+	 * @see jpos.config.JposEntryConst#PROP_TYPES
+	 * @since 2.0.0
+	 */
+	public static boolean isValidPropType( Class propType )
+	{
+		if( propType == null ) return false;
+
+		for( int i = 0; i < JposEntryConst.PROP_TYPES.length; ++i )
+			if( propType.equals( JposEntryConst.PROP_TYPES[ i ] ) )
+				return true;
+
+		return false;
+	}
+
+	/**
+	 * @return the default value object for the propType class passed
+	 * @param propType the property type Class
+	 * @exception jpos.config.JposConfigException if this property type is not 
+	 * valid
+	 */
+	public static Object getDefaultValueForType( Class propType ) throws JposConfigException
+	{
+		if( isValidPropType( propType ) == false )
+			throw new JposConfigException( "Invalid property type: " + propType );
+
+		Object propValue = "";
+
+		try
+		{
+			if( propType.equals( String.class ) )
+				propValue = "";
+			else
+			if( propType.equals( Boolean.class ) )
+				propValue = new Boolean( false );
+			else
+			if( propType.equals( Character.class ) )
+				propValue = new Character( 'a' );
+			else
+			if( propType.equals( Double.class ) )
+				propValue = new Double( 0 );
+			else
+			if( propType.equals( Float.class ) )
+				propValue = new Float( 0 );
+			else
+			if( propType.equals( Byte.class ) )
+				propValue = new Byte( (byte)0 );
+			else
+			if( propType.equals( Integer.class ) )
+				propValue = new Integer( 0 );
+			else
+			if( propType.equals( Long.class ) )
+				propValue = new Long( 0 );
+			else
+			if( propType.equals( Short.class ) )
+				propValue = new Short( (short)0 );
+		}
+		catch( Exception e )
+		{ throw new JposConfigException( "Invalid property type" ); }
+
+		return propValue;		
+	}
+
+	/**
+	 * @return the property value Object parsed from the String passed assuming that its
+	 * of a valid property type and also that the string can be converted 
+	 * @param stringValue the String value to parse
+	 * @param propType the property value type
+	 * @see jpos.config.JposEntryConst#PROP_TYPES
+	 * @exception jpos.config.JposConfigException if this property value cannot be created
+	 * from the arguments passed
+	 * @since 2.0.0
+	 */
+	public static Object parsePropValue( String stringValue, Class propType ) throws JposConfigException
+	{
+		if( isValidPropType( propType ) == false )
+			throw new JposConfigException( "Invalid property type: " + propType );
+
+		Object propValue = "";
+
+		try
+		{
+			if( propType.equals( String.class ) )
+				propValue = stringValue;
+			else
+			if( propType.equals( Boolean.class ) )
+				propValue = Boolean.valueOf( stringValue );
+			else
+			if( propType.equals( Character.class ) )
+				propValue = new Character( stringValue.charAt( 0 ) );
+			else
+			if( propType.equals( Double.class ) )
+				propValue = Double.valueOf( stringValue );
+			else
+			if( propType.equals( Float.class ) )
+				propValue = Float.valueOf( stringValue );
+			else
+			if( propType.equals( Byte.class ) )
+				propValue = Byte.decode( stringValue );
+			else
+			if( propType.equals( Integer.class ) )
+				propValue = Integer.decode( stringValue );
+			else
+			if( propType.equals( Long.class ) )
+				propValue = Long.decode( stringValue );
+			else
+			if( propType.equals( Short.class ) )
+				propValue = Short.decode( stringValue );
+		}
+		catch( Exception e )
+		{ throw new JposConfigException( "Could not create property value of type: " + 
+										 propType + " from string: " + stringValue ); }
+
+		return propValue;
+	}
+
+	/** 
+	 * @return the Class type for the property from the typeString passed.  The type
+	 * string can either be the short name of the type or the fully-qualified class name
+	 * @param typeString the type string name
+	 * @throws jpos.config.JposConfigException if the typeString is not a valid property type string
+	 */
+	public static Class propTypeFromString( String typeString ) throws JposConfigException
+	{
+		if( typeString == null ) throw new JposConfigException( "typeString cannot be null" );
+
+		String className = ( typeString.startsWith( "java.lang." ) ? typeString : "java.lang." + typeString );
+
+		try
+		{
+			Class typeClass = Class.forName( className );
+
+			if( isValidPropType( typeClass ) == false )
+				throw new JposConfigException( "Invalid property type: " + typeString );
+
+			return typeClass;
+		}
+		catch( ClassNotFoundException cnfe ) { throw new JposConfigException( "Invalid typeString", cnfe ); }
+	}
+
+	//-------------------------------------------------------------------------
+	// Class variables
+	//
+
+	private static JposEntry prototypeJposEntry = null;
+
+	//-------------------------------------------------------------------------
+	// Class constants
+	//
+	
+	private static final List STANDARD_PROP_NAMES_LIST = new ArrayList();
+
+	//-------------------------------------------------------------------------
+	// Static initializer
+	//
+
+	/** Initializes the standard set of properties */
+	static
+	{
+		for( int i = 0; i < JposEntryConst.REQUIRED_PROPS.length; ++i )
+			STANDARD_PROP_NAMES_LIST.add( JposEntryConst.REQUIRED_PROPS[ i ] );
+
+		STANDARD_PROP_NAMES_LIST.add( JposEntryConst.DEVICE_BUS_PROP_NAME );
+
+		for( int i = 0; i < JposEntryConst.RS232_PROPS.length; ++i )
+			STANDARD_PROP_NAMES_LIST.add( JposEntryConst.RS232_PROPS[ i ] );
+	}
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/util/JposProperties.java b/org.eclipse.osbp.fork.jpos/src/jpos/util/JposProperties.java
new file mode 100644
index 0000000..6aedd6f
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/util/JposProperties.java
@@ -0,0 +1,204 @@
+package jpos.util;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.util.Iterator;
+import java.util.Enumeration;
+import java.util.List;
+
+/**
+ * Sample interface that contains constants for all the JposProperties (names, default
+ * values, etc...) and some methods that the implementing property class must define.
+ * @since 1.2 (NY 2K 99 meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface JposProperties extends JposPropertiesConst 
+{
+    //-------------------------------------------------------------------------
+    // Public methods
+    //
+
+    /**
+     * Loads the jpos.properties file from the "./jpos/res" directory
+     * @since 1.2 (NY 2K meeting)
+     */
+    public void loadJposProperties();
+
+	/**
+	 * @return true if the properties are loaded
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public boolean isLoaded();
+
+    /**
+     * @return the String property by name specified looking in System then the "jpos.properties" resource bundle
+     * @param propName the property name to search for
+     * @since 1.2 (NY 2K meeting)
+     */
+    public String getPropertyString( String propName );
+
+    /**
+     * @return true if this property is defined in the Java System properties or in
+     * the jpos.properties resource file
+     * @param propName the property name to look for
+     * @since 1.2 (NY 2K meeting)
+     */
+    public boolean isPropertyDefined( String propName );
+
+    /**
+     * @return an enumeration of properties names defined
+     * @since 1.2 (NY 2K meeting)
+     */
+    public Enumeration getPropertyNames();
+    
+    /**
+     * @return a List of property value parsed from the property value found
+     * for the property name
+     * @param propName the property name for which the values will be parsed from
+     * @since 2.1.0
+     */
+	public List getStringListProperty( String propName );
+
+	/**
+	 * @return the MultiProperty by the name passed.  MultiProperty are properties
+	 * named like <propName>.<n> where n = 0, 1, ...  If the multi-property does not
+	 * exist then null is returned
+	 * @param multiPropName the multi-property name
+	 * @since 1.3 (Wahington DC 2001 meeting)
+	 */
+	public JposProperties.MultiProperty getMultiProperty( String multiPropName );
+
+	/**
+	 * @return true if the MultiProperty by the name passed exist otherwise false
+	 * @param multiPropName the multi-property name
+	 * @since 1.3 (Wahington DC 2001 meeting)
+	 */
+	public boolean hasMultiProperty( String multiPropName );
+
+	/**
+	 * @return an iterator of JposProperties.Prop for all the properties in this
+	 * JposProperties.  Changes to these properties do not affect the JposProperties properties
+	 * @see jpos.util.JposProperties.Prop
+	 * @since 1.3 (Washington DC 2001)
+	 */
+	public Iterator getProps();
+
+	/**
+	 * @return the number of properties in this JposProperties
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public int size();
+
+	//-------------------------------------------------------------------------
+	// Public inner interfaces
+	//
+
+	/**
+	 * Speficies an interface used for returning multi properties.  That is
+	 * properties that are named like <name>.x where x = 0, 1, ...x
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 * @since 1.3 (Washington DC 2001 meeting)
+	 */
+	public interface MultiProperty
+	{
+		/** 
+		 * @return the number of this property name that is for property <propName>.x returns x 
+		 * @param propName the property name to get the number of
+		 * @throws java.lang.IllegalArgumentException if the property name does not follow the <propName>.x name pattern
+		 */
+		public int propertyNumber( String propName ) throws IllegalArgumentException;
+
+		/** 
+		 * @return the base property name for this multi-property that is the
+		 * name w/o the number suffix
+		 */
+		public String getBasePropertyName();
+
+		/** @return an iterator of the property names for this multi-property */
+		public Iterator getPropertyNames();
+
+		/** @return an iterator of the property names alphabetically sorted for this multi-property */
+		public Iterator getSortedPropertyNames();
+
+		/** @return an iterator of the property values for this multi-property */
+		public Iterator getPropertyValues();
+
+		/**
+		 * @return the value for this property from the full property name
+		 * @param propName the full property name <name>.x
+		 */
+		public String getPropertyString( String propName );
+
+		/**
+		 * @return the value for this property from the full property name
+		 * @param number suffix for the property name
+		 * @throws java.lang.IllegalArgumentException if the i negative
+		 */
+		public String getPropertyString( int i ) throws IllegalArgumentException;
+
+		/** @return the number of properties defined in this multi-property */
+		public int getNumberOfProperties();
+	}
+
+	/**
+	 * Simple wrapper class for a property pair <name, value>
+	 * @author E. Michael Maximilien (maxim@us.ibm.com)
+	 * @since 1.3 (Washington DC 2001)
+	 */
+	public interface Prop extends Comparable
+	{
+		/** @return the name of this property */
+		public String getName();
+
+		/** @return the value of this property */
+		public String getValue();
+
+		/**
+		 * Sets the value of this property 
+		 * @param s the new prop name
+		 */
+		public void setName( String s );
+
+		/** 
+		 * Sets the value of this property 
+		 * @param s the name String
+		 */
+		public void setValue( String s );
+
+		/**
+		 * @return 0 if 2 objects same -1 if this is less or +1 if this is more than other
+		 * @param other the other object to compare against this
+		 */
+		public int compareTo( JposProperties.Prop other );
+
+		/**
+		 * @return 0 if 2 objects same -1 if this is less or +1 if this is more than other
+		 * @param other the other object to compare against this
+		 */
+		public int compareTo( Object other );
+	}
+	
+	//-------------------------------------------------------------------------
+	// Public static constants
+	//
+	
+	public static final String TRACING_PROP_NAME = "jpos.util.tracing";
+	public static final String TRACING_ON_PROP_VALUE = "ON";
+	public static final String TRACING_TRUE_PROP_VALUE = "TRUE";
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/util/JposPropertiesConst.java b/org.eclipse.osbp.fork.jpos/src/jpos/util/JposPropertiesConst.java
new file mode 100644
index 0000000..357f75b
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/util/JposPropertiesConst.java
@@ -0,0 +1,141 @@
+package jpos.util;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Interface with all JposPropertiesConstants like property names and values
+ * @since 1.3 (Washington DC 2001 meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public interface JposPropertiesConst
+{
+    //-------------------------------------------------------------------------
+    // Public constants (non-properties name)
+    //
+
+    /**
+     * Constant defining the resource name for the "jpos.properties" file
+     * @since 1.2 (NY 2K meeting)
+     */
+    public static final String JPOS_PROPERTIES_FILENAME = "jpos/res/jpos.properties";
+
+    /**
+     * The default name for the serialized file of JposEntry
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public static final String DEFAULT_ENTRIES_SER_FILE_NAME = "jpos.cfg";
+
+    //-------------------------------------------------------------------------
+    // Public constants (properties name)
+    //
+
+    /**
+     * Constants defining the JavaPOS service manager class name Java property 
+     * @since 0.1 (Philly 99 meeting)
+     */
+    public static final String JPOS_SERVICE_MANAGER_CLASS_PROP_NAME = "jpos.config.serviceManagerClass";
+
+    /**
+     * Constants defining the JavaPOS service manager class name Java property 
+     * NOTE: this is the correct name to use to specify the class implementing the 
+     * JposServiceManager interface since this interface was moved to the jpos.loader
+     * package.  The JposServiceLoader will use both...
+     * @since 1.2 (NY 2K meeting)
+     */
+    public static final String JPOS_SERVICE_MANAGER_CLASS_PROP_NAME2 = "jpos.loader.serviceManagerClass";
+
+    /**
+     * Constants defining the JavaPOS JposRegPopulator implementor class name Java property 
+     * @since 1.2 (NY 2K meeting)
+     */
+    public static final String JPOS_REG_POPULATOR_CLASS_PROP_NAME = "jpos.config.regPopulatorClass";
+
+    /**
+     * Constants defining the JavaPOS local populator file Java property 
+     * @since 1.2 (NY 2K meeting)
+     */
+    public static final String JPOS_POPULATOR_FILE_PROP_NAME = "jpos.config.populatorFile";
+
+
+    /**
+     * Constants defining the JavaPOS URL populator file Java property 
+     * @since 1.2 (NY 2K meeting)
+     */
+    public static final String JPOS_POPULATOR_FILE_URL_PROP_NAME = "jpos.config.populatorFileURL";
+
+    /**
+     * Constants defining the JavaPOS tracing facility Java property 
+     * @since 1.2 (NY 2K meeting)
+     */
+    public static final String JPOS_TRACING_PROP_NAME = "jpos.util.tracing";
+
+    //-------------------------------------------------------------------------
+    // Public constants (multi-properties name)
+    //
+
+    /**
+     * Defines the base name for a multi-property constant used to define the multiple
+	 * populator class name
+     * @since 1.3 (Washington DC 2001 meeting)
+     */
+	public static final String JPOS_CONFIG_POPULATOR_CLASS_MULTIPROP_NAME = "jpos.config.populator.class";
+
+    /**
+     * Defines the base name for a multi-property constant used to define the multiple
+	 * populator file (i.e. the file that the populator will use to load the entries.
+     * @since 1.3 (Washington DC 2001 meeting)
+     */
+	public static final String JPOS_CONFIG_POPULATOR_FILE_MULTIPROP_NAME = "jpos.config.populator.file";
+
+    //-------------------------------------------------------------------------
+    // Public constants (properties value)
+    //
+
+    /**
+     * Constants defining the JavaPOS tracing facility Java property value of ON
+     * <b>NOTE</b>: either this or the JposProperties#JPOS_TRACING_TRUE_PROP_VALUE works
+     * @since 1.2 (NY 2K meeting)
+     */
+    public static final String JPOS_TRACING_ON_PROP_VALUE = "ON";
+    
+    /**
+     * Constants defining the JavaPOS tracing facility Java property of TRUE
+     * <b>NOTE</b>: either this or the JposProperties#JPOS_TRACING_ON_PROP_VALUE works
+     * @since 1.2 (NY 2K meeting)
+     */
+    public static final String JPOS_TRACING_TRUE_PROP_VALUE = "TRUE";
+
+	//-------------------------------------------------------------------------
+	// Public constants
+	//
+
+	/**
+	 * String array of all property names
+	 * @since 1.3 (Washington DC 2001)
+	 */
+	public static final String[] PROP_NAME_ARRAY = { JPOS_SERVICE_MANAGER_CLASS_PROP_NAME,
+                                                     JPOS_SERVICE_MANAGER_CLASS_PROP_NAME2,
+                                                     JPOS_REG_POPULATOR_CLASS_PROP_NAME,
+                                                     JPOS_POPULATOR_FILE_PROP_NAME,
+                                                     JPOS_POPULATOR_FILE_URL_PROP_NAME,
+                                                     JPOS_TRACING_PROP_NAME,
+                                                     JPOS_CONFIG_POPULATOR_CLASS_MULTIPROP_NAME,
+                                                     JPOS_CONFIG_POPULATOR_FILE_MULTIPROP_NAME };
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/util/JposPropertiesViewer.java b/org.eclipse.osbp.fork.jpos/src/jpos/util/JposPropertiesViewer.java
new file mode 100644
index 0000000..734ac36
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/util/JposPropertiesViewer.java
@@ -0,0 +1,46 @@
+package jpos.util;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import jpos.loader.*;
+
+/**
+ * Simple application to printout the current values from the JposProperties 
+ * implementing class
+ * @since 1.2 (NY 2K 99 meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public class JposPropertiesViewer extends Object
+{
+    //-------------------------------------------------------------------------
+    // Public class methods
+    //
+
+    /**
+     * Simple main entry point that prints out all current properties (name and value) defined
+     * @param args the array for String argument
+     */
+    public static void main( String[] args )
+    {
+        System.out.println( "<!-- JavaPOS jpos.config/loader (JCL) defined Java properties: -->" );
+        System.out.println( "<!-- name = \"propName\" value = \"propValue\" -->" );
+
+        System.out.println( JposServiceLoader.getManager().getProperties() );
+    }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/util/PopupHelper.java b/org.eclipse.osbp.fork.jpos/src/jpos/util/PopupHelper.java
new file mode 100644
index 0000000..9af2351
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/util/PopupHelper.java
@@ -0,0 +1,99 @@
+package jpos.util;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.awt.*;
+import java.awt.event.*;
+
+import javax.swing.*;
+
+import java.util.*;
+
+/**
+ * utility class that enables and controls showing of popupMenus
+ * @author Manuel M Monserrate
+ * @since 1.3 (SF 2K meeting)
+ */
+public class PopupHelper 
+{ 
+    static Dictionary dictionary = new Hashtable(); 
+    
+    static MouseListener popupMouseListener = new java.awt.event.MouseAdapter() 
+        { 
+             
+            void tryPopup( MouseEvent evt ) { 
+                
+                if ( !evt.isPopupTrigger() ) 
+                    return; 
+                
+                Component mouseEvtComp = evt.getComponent(); 
+                
+                Object o[] = (Object [])dictionary.get( mouseEvtComp ); 
+                
+                if ( o == null ) 
+                    return; 
+                
+                JPopupMenu popupMenu = (JPopupMenu)o[0]; 
+                
+                PopupListener popupListener = (PopupListener)o[1]; 
+
+                int x = evt.getX(), y = evt.getY(); 
+                                         
+                boolean go = true; 
+                                         
+                if ( popupListener != null ) 
+                    go = popupListener.startPopup( x, y ); 
+                                         
+                if ( go ) 
+                    popupMenu.show( mouseEvtComp, x - 20, y - 10 ); 
+            } 
+                                                 
+            public void mousePressed( MouseEvent evt ) { tryPopup( evt ); } 
+            
+            public void mouseReleased( MouseEvent evt ) { tryPopup( evt ); } 
+        }; 
+                                 
+
+    /**
+     * registers a component to listen to mouse events for the popupMenu, does not use
+     * the PopupListener to do extra setting up for the menu
+     * @since 1.3 (SF 2K meeting)
+     */
+    public static void setPopup( JComponent mouseEvtComp, JPopupMenu popupMenu ) { setPopup( mouseEvtComp, popupMenu, null ); } 
+
+    /**
+     * registers a component to listen to mouse events for the popupMenu, uses
+     * the PopupListener to do extra setting up for the menu when mouse is clicked
+     * @since 1.3 (SF 2K meeting)
+     */
+    public static void setPopup( JComponent mouseEvtComp, JPopupMenu popupMenu, PopupListener popupListener )
+    { 
+        Object o[] = { popupMenu, popupListener }; 
+        
+        dictionary.put( mouseEvtComp, o ); 
+        
+        mouseEvtComp.addMouseListener( popupMouseListener ); 
+    } 
+        
+    /**
+     * unregisters a component from listen to mouse events for the popupMenu
+     * @since 1.3 (SF 2K meeting)
+     */
+    public static void removePopup( JComponent mouseEvtComp ) { dictionary.remove( mouseEvtComp ); } 
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/util/PopupListener.java b/org.eclipse.osbp.fork.jpos/src/jpos/util/PopupListener.java
new file mode 100644
index 0000000..9d4b995
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/util/PopupListener.java
@@ -0,0 +1,38 @@
+package jpos.util;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * class that prepares a JPopoupMenu for display
+ * @author Manuel M Monserrate    
+ * @since 1.3 (SF 2K meeting)
+ */
+public class PopupListener
+{
+    /**
+     * used to setUp the PopupMenu depending on the coordinates given to the method
+     * @param x, the x-coordinate
+     * @param y, the y-coordinate
+     * @return true to show menu, false to cancel 
+     */
+    public boolean startPopup( int x, int y )
+    {
+        return true;
+    }
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/util/Sorter.java b/org.eclipse.osbp.fork.jpos/src/jpos/util/Sorter.java
new file mode 100644
index 0000000..0865e0c
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/util/Sorter.java
@@ -0,0 +1,134 @@
+package jpos.util;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.util.*;
+
+/**
+ * This is utility class to sort Comparable elements in Vector objects
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ * @version 1.1.x (JDK 1.1.x)
+ */
+public final class Sorter extends Object
+{
+    //-------------------------------------------------------------------------
+    // Ctor
+    //
+
+    /** Make ctor private to prevent construction */
+    private Sorter() {}
+
+    //-------------------------------------------------------------------------
+    // Class methods
+    //
+
+    /**
+     * @return the smallest Comparable element in this Vector
+     * <b>NOTE:</b>implements a simple one pass algorithm in O(n) time
+     */
+    public static Comparable min( Vector comparables )
+    {
+        Comparable smallest = null;
+        Enumeration elements = comparables.elements();
+
+        while( elements.hasMoreElements() )
+        {
+            Comparable element = (Comparable)elements.nextElement();
+
+            if( smallest != null )
+            {
+                if( smallest.compareTo( element ) > 0 )
+                    smallest = element;
+            }
+            else
+                smallest = element;
+        }
+
+        return smallest;
+    }
+
+    /**
+     * @return the greatest Comparable element in this Vector
+     * <b>NOTE:</b>implements a simple one pass algorithm in O(n) time
+     */
+    public static Comparable max( Vector comparables )
+    {
+        Comparable greatest = null;
+        Enumeration elements = comparables.elements();
+
+        while( elements.hasMoreElements() )
+        {
+            Comparable element = (Comparable)elements.nextElement();
+
+            if( greatest != null )
+            {
+                if( greatest.compareTo( element ) < 0 )
+                    greatest = element;
+            }
+            else
+                greatest = element;
+        }
+
+        return greatest;
+    }
+
+    /**
+     * @return a Vector of sorted Comparable objects
+     * <b>NOTE:</b>implements a simple Insertion Sort algorithm
+     *         Sorts n element in place in O(n^2) worst-case time
+     * @param elements a Vector with the initial Comparable objects
+     */
+    public static Vector insertionSort( Vector comparables )
+    {
+        Comparable min = min( comparables );
+
+        comparables.removeElement( min );
+
+        comparables.insertElementAt( min, 0 );
+
+        for( int i = 2; i < comparables.size(); i++ )
+        {
+            Comparable temp = (Comparable)comparables.elementAt( i );
+            int j = 0;
+            for( j = i; j > 0 && temp.compareTo( (Comparable)comparables.elementAt( j - 1 ) ) < 0; --j )
+                comparables.setElementAt( comparables.elementAt( j - 1 ), j );
+
+            comparables.setElementAt( temp, j );
+        }
+
+        return comparables;
+    }
+
+    /**
+     * @return a Vector of sorted Comparable objects
+     * <b>NOTE:</b>implements the Merge Sort algorithm
+     *         Sorts n element in O(nlgn) worst-case time
+     * @param elements a Vector with the initial Comparable objects
+     */
+    public static Vector mergeSort( Vector comparables )
+    {
+        //<todo why="Proboby useful for large number of values since Merge-sort is O(nlgn)">
+        throw new RuntimeException( "Not yet implemented!" );
+        //</todo>
+    }
+
+    //-------------------------------------------------------------------------
+    // Class variables
+    //
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/util/Tracer.java b/org.eclipse.osbp.fork.jpos/src/jpos/util/Tracer.java
new file mode 100644
index 0000000..befe641
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/util/Tracer.java
@@ -0,0 +1,187 @@
+package jpos.util;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Tracing class to help in the debugging of the JCL and JavaPOS controls:
+ * This class is a Singleton (see GoF Design Pattern book)
+ * <b>This class is superceded by the classes in the jpos.util.tracing package
+ * access the sole instance by doing: Tracer.getInstance() call
+ * @see jpos.util.tracing.Tracer
+ * @see jpos.util.tracing.TracerFactory
+ * @deprecated see the classes in the jpos.util.tracing package
+ * @since 1.2 (NY 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public class Tracer extends Object
+{
+    //--------------------------------------------------------------------------
+    // Ctor
+    //
+
+    /**
+     * Make ctor private to avoid construction (this is a Singleton class)
+     * @since 1.2 (NY 2K meeting)
+     */
+    private Tracer() {}
+
+    //--------------------------------------------------------------------------
+    // Public class methods
+    //
+
+    /**
+     * @return the sole instance of this class (creating it if necessary)
+     * @since 1.2 (NY 2K meeting)
+     */
+    public static Tracer getInstance()
+    {
+        if( instance == null )
+        {
+            instance = new Tracer();
+
+            instance.init();
+        }
+
+        return instance;
+    }
+
+    //--------------------------------------------------------------------------
+    // Public methods
+    //
+
+    /**
+     * Prints a string appended with a new line to the tracer output
+     * @param s the String to print
+     */
+    public void println( String s ) { getTracerOutput().println( s ); }
+
+    /**
+     * Prints a string appended without a new line to the tracer output
+     * @param s the String to print
+     */
+    public void print( String s ) { getTracerOutput().print( s ); }
+
+    /**
+     * Sets this tracer ON or OFF
+     * @param b the boolean parameter
+     * @since 1.2 (NY 2K meeting)
+     */
+    public void setOn( boolean b ) { tracerOn = b; }
+
+    /**
+     * @return true if the tracer is ON (i.e. enabled)
+     * @since 1.2 (NY 2K meeting)
+     */
+    public boolean isOn() { return tracerOn; }
+     
+    //--------------------------------------------------------------------------
+    // Private methods
+    //
+
+    /**
+     * Intialize the current JCL instance using the DefaultProperties class
+     * @since 1.2 (NY 2K meeting)
+     */
+    private void init()
+    {
+        JposProperties props = new DefaultProperties();
+        props.loadJposProperties();
+
+        if( !props.isPropertyDefined( JposProperties.JPOS_TRACING_PROP_NAME ) )
+            setOn( false );
+        else
+        {
+            String tracingPropValue = 
+                   props.getPropertyString( JposProperties.
+                                            JPOS_TRACING_PROP_NAME );
+
+            if( tracingPropValue.
+                equalsIgnoreCase( JposProperties.
+                                  JPOS_TRACING_ON_PROP_VALUE ) ||
+                tracingPropValue.
+                equalsIgnoreCase( JposProperties.
+                				  JPOS_TRACING_TRUE_PROP_VALUE ) )
+                setOn( true );
+        }
+    }
+
+    /**
+     * @return the tracerOutput object for the Tracer
+     * @since 1.2 (NY 2K meeting)
+     */
+    private TracerOutput getTracerOutput() 
+    { 
+        return ( isOn() ? onTracerOutput : offTracerOutput );
+    }
+
+    //--------------------------------------------------------------------------
+    // Private instance variables
+    //
+
+    private boolean tracerOn = false;
+
+    private TracerOutput onTracerOutput = new DefaultTracerOutput();
+    private TracerOutput offTracerOutput =  
+    					  	new TracerOutput()
+                          	{
+                          		public void println( String s ) {}
+                                public void print( String s ) {}
+                            };
+
+    //--------------------------------------------------------------------------
+    // Private class variables
+    //
+
+    private static Tracer instance = null;
+
+    //--------------------------------------------------------------------------
+    // Private static inner classes
+    //
+
+    /**
+     * Inner class for a default TracerOutput.  Just prints out info to 
+     * System.err
+     * @since 1.2 (NY 2K meeting)
+     * @author E. Michael Maximilien (maxim@us.ibm.com)
+     */
+    static class DefaultTracerOutput extends Object implements TracerOutput
+    {
+        /**
+         * Default ctor
+         * @since 1.2 (NY 2K meeting)
+         */
+        public DefaultTracerOutput() {}
+
+        //----------------------------------------------------------------------
+        // Public methods
+        //
+        
+        /**
+         * Prints a string appended with a new line to the tracer output
+         * @param s the String to print
+         */
+        public void println( String s ) { System.err.println( s ); }
+
+        /**
+         * Prints a string appended without a new line to the tracer output
+         * @param s the String to print
+         */
+        public void print( String s ) { System.err.print( s ); }
+    }
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/util/TracerOutput.java b/org.eclipse.osbp.fork.jpos/src/jpos/util/TracerOutput.java
new file mode 100644
index 0000000..43247fc
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/util/TracerOutput.java
@@ -0,0 +1,43 @@
+package jpos.util;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Defines an interface for outputing tracing info
+ * @since 1.2 (NY 2K 99 meeting)
+ * @author EMM
+ */
+public interface TracerOutput
+{
+    //-------------------------------------------------------------------------
+    // Public methods
+    //
+
+    /**
+     * Prints a string appended with a new line to the tracer output
+     * @param s the String to print
+     */
+    public void println( String s );
+
+    /**
+     * Prints a string appended without a new line to the tracer output
+     * @param s the String to print
+     */
+    public void print( String s );
+}
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/util/XmlHelper.java b/org.eclipse.osbp.fork.jpos/src/jpos/util/XmlHelper.java
new file mode 100644
index 0000000..3219384
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/util/XmlHelper.java
@@ -0,0 +1,261 @@
+package jpos.util;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.io.*;
+import java.util.*;
+
+import jpos.util.tracing.Tracer;
+import jpos.util.tracing.TracerFactory;
+
+/**
+ * Simple helper class for XML related activities
+ * @since 1.3 (SF 2K meeting)
+ * @author E. Michael Maximilien (maxim@us.ibm.com)
+ */
+public class XmlHelper extends Object
+{
+    //-------------------------------------------------------------------------
+    // Public methods
+    //
+
+	/** @return the current DTD file name */
+	public String getDtdFileName() { return dtdFileName; }
+
+	/** @return the current DTD file path */
+	public String getDtdFilePath() { return dtdFilePath; }
+
+	/**
+	 * Sets the DTD file name that should be extracted by this helper
+	 * @param fileName the XML file name
+	 */
+	public void setDtdFileName( String fileName ) { dtdFileName = fileName; }
+
+	/**
+	 * Sets the DTD file path that should be extracted by this helper
+	 * @param filePath the XML file name
+	 */
+	public void setDtdFilePath( String filePath ) 
+	{ 
+		dtdFilePath = ( filePath.endsWith( File.separator ) ?
+						filePath :
+						filePath + File.separator ); 
+	}
+
+    /**
+     * Checks if the dtdFile is available in the DTD path specified if not 
+	 * then creates it extracting it from the JAR file
+     */
+    public void checkAndCreateTempDtd()
+    {
+        createdTempDTD = false;
+        createdTempDir = false;
+        InputStream is = null;
+
+		dtdJarFullFileName = dtdFilePath + dtdFileName;
+
+        try
+        {
+            File dtdPath = new File( dtdFilePath );
+            File dtdFile = new File( dtdJarFullFileName );
+
+            if( dtdFile.exists() )
+				return;            
+            
+            if( !dtdPath.exists() )
+            {
+                dtdPath.mkdirs();
+
+                createdTempDir = true;
+
+				tracer.println( "DTD file PATH does not exist.  Created path " + 
+								dtdFilePath );
+            }
+            
+            is = ClassLoader.getSystemClassLoader().getResourceAsStream( dtdJarFullFileName );
+
+			tracer.println( "Got DTD InputStream from current ClassLoader" );
+
+            if( is != null )
+				readAndCreateTempDtdFile( is );
+        }
+        catch( IOException ioe )
+        { 
+        	tracer.println( "Error creating DTD file: Exception.message = " + 
+        	  			    ioe.getMessage() ); 
+        }
+        finally
+        {
+            try{ if( is != null ) is.close(); }
+            catch( IOException ioe ) 
+            {
+	        	tracer.println( "Error while closing streams:" +
+	        					" Exception.message = " + 
+    	    	  			    ioe.getMessage() );             	
+            }
+        }
+    }
+
+    /** Removes the DTD path if it was created */
+    public void removeTempDtd()
+    {			
+        try
+        {
+            if( createdTempDTD )
+            {
+                File dtdFile = new File( dtdJarFullFileName );
+                dtdFile.delete();
+
+				if( createdTempDir )
+					removeDirs( dtdFilePath );
+					
+				tracer.println( "Removed temp directory with DTD OK" );
+            }
+        }
+        catch( Exception e )
+        { 
+        	tracer.println( "Error removing temporary DTD file: " +
+        	  				"Exception.msg = " + e.getMessage() ); 
+       	}
+    }
+
+    //-------------------------------------------------------------------------
+    // Private methods
+    //
+
+	/**
+	 * Reads the DTD file from the InputStream provided and creates a temp
+	 * @exception java.io.IOException if anything goes wrong
+	 */
+	private void readAndCreateTempDtdFile( InputStream is ) throws IOException
+	{
+		File dtdFile = new File( dtdJarFullFileName );
+		
+		FileOutputStream fos = new FileOutputStream( dtdFile );
+		OutputStreamWriter osw = new OutputStreamWriter( fos );
+
+		StringBuffer sb = new StringBuffer();
+
+		while( is.available() > 0 )
+		{
+			byte[] buffer = new byte[ is.available() ];
+
+			is.read( buffer );
+
+			sb.append( new String( buffer ) );
+		}
+
+		osw.write( sb.toString().trim() );
+
+		createdTempDTD = true;
+
+		try
+		{ 
+			if( osw != null ) osw.close(); 
+			if( fos != null ) fos.close(); 
+		}
+		catch( IOException ioe ) 
+		{
+			tracer.println( "Error while closing streams: IOExeption.msg=" +
+							ioe.getMessage() );
+		}
+
+		tracer.println( "Read and created temp " + dtdFilePath + dtdFileName );
+	}
+
+	/**
+	 * @return a Vector of the different directories from a directory string
+	 * @param originalDirName the full directory name
+	 */
+	private Vector getSubdirNames( String originalDirName )
+	{
+		String dirName = originalDirName.
+						 replace( "\\".charAt( 0 ), "/".charAt( 0 ) );
+
+		if( !dirName.endsWith( "/" ) ) dirName = dirName + "/";
+
+		Vector dirs = new Vector();
+		String s = dirName;
+
+		while( s.indexOf( "/" ) != -1 )
+		{
+			dirs.add( s.substring( 0, s.indexOf( "/" ) ) );
+			s = s.substring( s.indexOf( "/" ) + 1 );
+		}
+
+		return dirs;
+	}
+
+    //-------------------------------------------------------------------------
+    // Package methods
+    //
+
+	/**
+	 * Removes the directory specified by this dirName (including any sub-dirs)
+	 * @param dirName the directory name to remove
+	 * @exception java.io.IOException if something goes wrong
+	 */
+	void removeDirs( String dirName ) throws IOException
+	{
+		Vector subdirNames = getSubdirNames( dirName );
+
+		while( subdirNames.size() > 0 )
+		{
+			Vector v = (Vector)subdirNames.clone();
+
+			String subdirName = "";
+			for( int i = 0; i < subdirNames.size(); ++i )
+				subdirName += (String)subdirNames.elementAt( i ) + 
+							  File.separator;
+		
+			File subdirFile = new File( subdirName );
+			
+			if( subdirFile.list() != null &&
+				subdirFile.list().length == 0 )
+				subdirFile.delete();
+
+			if( subdirNames.size() > 0 )
+				subdirNames.removeElementAt( subdirNames.size() - 1 );
+		}
+	}
+
+    //-------------------------------------------------------------------------
+    // Private instance variables
+    //
+
+	private String dtdFileName = DEFAULT_DTD_FILE_NAME;
+	private String dtdFilePath = DEFAULT_DTD_FILE_PATH;
+	private String dtdJarFullFileName = dtdFilePath + File.separator + 
+										 dtdFileName;
+    
+	private boolean createdTempDTD = false;
+    private boolean createdTempDir = false;
+
+	private Tracer tracer = TracerFactory.getInstance().
+							 createTracer( "XmlHelper" );
+
+	//-------------------------------------------------------------------------
+	// Class constants
+	//
+
+	public static final String DEFAULT_DTD_FILE_NAME = "jcl.dtd";
+    public static final String DEFAULT_DTD_FILE_PATH = "jpos" + 
+    													 File.separator + 
+    													 "res" + File.separator;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/util/tracing/Tracer.java b/org.eclipse.osbp.fork.jpos/src/jpos/util/tracing/Tracer.java
new file mode 100644
index 0000000..ee92b48
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/util/tracing/Tracer.java
@@ -0,0 +1,351 @@
+package jpos.util.tracing;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import jpos.util.*;
+import java.io.PrintStream;
+
+/**
+ * Tracing class to help in the debugging of other package code
+ * <ol>
+ * <li>
+ * <b>Note 1:</b> this class is a Singleton (see GoF Design Pattern book)
+ * ccess the sole instance by doing: Tracer.getInstance() call
+ * </li>
+ * <li>
+ * <b>Note 2:</b> Will allow (in the future) the option of defining different
+ * ouput for the tracer (1.3 version)
+ * </li>
+ * <li>
+ * By default Tracer objects are turned OFF but can dynamically or via
+ * properties file be turned OFF
+ * </li>
+ * </ol>
+ * @see com.ibm.jutil.Tracer#getInstance
+ * @author E. Michael Maximilien
+ * @since 2.1.0
+ */
+public class Tracer extends Object
+{
+    //-------------------------------------------------------------------------
+    // Ctor
+    //
+
+    /** Make ctor private to avoid construction (this is a Singleton class) */
+    protected Tracer() { appendName = false; }
+
+    /** 
+     * Creates a Tracer instance with name specified
+     * @param name the Tracer name
+     */
+    Tracer( String name ) 
+    {
+    	if( name == null || name.equals( "" ) ) 
+    	{
+    		appendName = false;
+    		tracerName = "";
+    		onTracerOutput = new DefaultTracerOutput();
+    	}
+	    else
+		{
+			appendName = true;
+    		onTracerOutput = new DefaultTracerOutput( "[" + name + "]" );
+    	 	tracerName = name; 
+ 		}
+    }
+
+    //-------------------------------------------------------------------------
+    // Public class methods
+    //
+
+    /** @return the sole instance of this class (creating it if necessary) */
+    public static Tracer getInstance()
+    {
+        if( instance == null )
+        {
+            instance = new Tracer();
+            instance.init();
+        }
+
+        return instance;
+    }
+    
+    //-------------------------------------------------------------------------
+    // Public methods
+    //
+
+    /**
+     * Prints a string appended with a new line to the tracer output
+     * @param s the String to print
+     */
+    public void println( String s ) { getTracerOutput().println( s ); }
+
+    /**
+     * Prints the String representation of the Object passed
+     * @param obj the Object to println
+     */
+    public void println( Object obj ) { getTracerOutput().println( obj.toString() ); }
+
+    /**
+     * Prints a string appended without a new line to the tracer output
+     * @param s the String to print
+     */
+    public void print( String s ) { getTracerOutput().print( s ); }
+
+    /**
+     * Prints a String representation of the Object passed
+     * @param obj the Object to print
+     */
+    public void print( Object obj ) { getTracerOutput().print( obj.toString() ); }
+
+    /**
+     * Prints a StackTrace from an Exception object.
+     * @param e the Exception to extract StackTrace from
+     */
+    public void print( Exception e ) { getTracerOutput().print( e ); }
+    
+    /** Flushes the Tracer */
+    public void flush() { getTracerOutput().flush(); }
+
+    /**
+     * Sets this tracer ON or OFF
+     * @param b the boolean parameter
+     */
+    public void setOn( boolean b ) { tracerOn = b; }
+
+    /** @return true if the tracer is ON (i.e. enabled) */
+    public boolean isOn() { return tracerOn; }
+
+	/** @return this Tracer's name */
+	public String getName() { return tracerName; }
+
+	/** 
+	 * Tells Tracer instance whether it should append name for each trace
+	 * message or not
+	 * @param b the boolean parameter
+	 */
+	public void setAppendName( boolean b ) { appendName = b; }
+    
+    /** @return whether the Tracer should append its name to each println method call */
+    public boolean isAppendName() { return appendName; }
+
+    //-------------------------------------------------------------------------
+    // Protected methods
+    //
+         
+    //-------------------------------------------------------------------------
+    // Private methods
+    //
+
+    /** Intialize the current instance using the DefaultProperties class */
+    private void init()
+    {
+        JposProperties props = new DefaultProperties();
+        props.loadJposProperties();
+
+        if( !props.isPropertyDefined( JposProperties.TRACING_PROP_NAME ) )
+            setOn( false );
+        else
+        {
+            String tracingPropValue = props.getPropertyString( JposProperties.TRACING_PROP_NAME );
+
+            if( tracingPropValue.equalsIgnoreCase( JposProperties.TRACING_ON_PROP_VALUE ) ||
+                tracingPropValue.equalsIgnoreCase( JposProperties.TRACING_TRUE_PROP_VALUE ) )
+                setOn( true );
+        }
+    }
+
+    /** @return the tracerOutput object for the Tracer */
+    private TracerOutput getTracerOutput() 
+    { 
+    	if( customTracerOutput != null ) return customTracerOutput;
+    	
+        return ( isOn() ? onTracerOutput : offTracerOutput );
+    }
+
+    //-------------------------------------------------------------------------
+    // Package methods
+    //
+    
+    /**
+     * Sets the TracerOutput object -- for debugging purposes
+     * @param tracerOutput the TracerOutput object
+     */
+    void setTracerOutput( TracerOutput tracerOutput )
+    {
+    	tracerOn = true;
+    	customTracerOutput = tracerOutput;
+    }
+
+    //-------------------------------------------------------------------------
+    // Private instance variables
+    //
+
+    private boolean tracerOn = false;
+	
+	private String tracerName = "";
+	private boolean appendName = true;
+
+	private TracerOutput customTracerOutput = null;
+    private TracerOutput onTracerOutput = new DefaultTracerOutput();
+
+    private TracerOutput offTracerOutput =  new TracerOutput()
+                                            {
+                                            	public void close() {}
+                                            	public String getPrefix() { return ""; }
+                                                public void print( Exception e ) {}
+                                                public void println( String s ) {}
+                                                public void print( String s ) {}
+                                                public void flush() {}
+                                            };
+
+    //-------------------------------------------------------------------------
+    // Private class variables
+    //
+
+    private static Tracer instance = null;
+    
+    //-------------------------------------------------------------------------
+    // Private static inner classes
+    //
+
+    /**
+     * Inner class for a default TracerOutput.  Just prints out info to System.err
+     * @author E. Michael Maximilien
+     */
+    class DefaultTracerOutput extends Object implements TracerOutput
+    {
+        //---------------------------------------------------------------------
+        // Ctor(s)
+        //    	
+    	
+        /** 
+         * Default ctor.  No prefix is used and the PrintStream is set
+         * to the System.err PrintStream
+         */
+        public DefaultTracerOutput() 
+        {
+        	prefix = "";
+        	appendName = false;
+        }
+
+        /** 
+         * Default ctor 
+         * @param s the String prefix to use for this TracerOutput
+         */
+        public DefaultTracerOutput( String s ) 
+        {
+        	if( s == null ) prefix = "";
+        	else
+        		if( s.equals( "" ) ) prefix = ""; 
+        		else     	
+        		{
+		        	prefix = s;
+		        	appendName = true;
+        		}
+        }
+        
+        /** 
+         * Default ctor 
+         * @param s the String prefix to use for this TracerOutput
+         * @param pStream the PrintStream object used for this TracerOutput
+         */
+        public DefaultTracerOutput( String s, PrintStream pStream ) 
+        {
+			this( s );
+			printStream = pStream;
+        }
+
+        //---------------------------------------------------------------------
+        // Public methods
+        //
+       
+	    /** 
+	     * @return any prefix that is to be used with this TracerOutput
+	     * <p>An existing prefix gets appended to every message</p>
+	     */
+	    public String getPrefix() { return prefix; }
+	    
+	    /**
+	     * Closes the TracerOutput.  If it is a file then closes the file
+	     * Any errors are not propagated up and rather printed to the System.errr
+	     */
+	    public void close() { getPrintStream().close(); }
+        
+        /**
+         * Prints a string appended with a new line to the tracer output
+         * @param s the String to print
+         */
+        public void println( String s ) 
+        { 		
+        	getPrintStream().println( ( appendName ? prefix : "" ) + s ); 
+        }
+
+        /**
+         * Prints a string appended without a new line to the tracer output
+         * @param s the String to print
+         */
+        public void print( String s ) 
+        { 
+        	getPrintStream().print( ( appendName ? prefix : "" ) + s ); 
+        }
+
+        /**
+         * Prints a StackTrace from an Exception object.
+         * @param e the Exception to extract StackTrace from
+         */
+        public void print( Exception e ) 
+        { 
+        	if( appendName ) System.err.println( "<" + prefix + ">" );
+        	
+        	e.printStackTrace( getPrintStream() ); 
+
+        	if( appendName ) System.err.println( "</" + prefix + ">" );
+        }
+        
+        /**
+         * Flushes this TracerOutput
+         * <i>
+         * For this TracerOutput does not do anything since output flushes
+         * automatically
+         * </i>
+         */
+        public void flush() { getPrintStream().flush(); }
+
+	    //-------------------------------------------------------------------------
+	    // Protected methods
+	    //
+	    
+	    /** @return the PrintStream object that is used for this TracerOutput */
+	    protected PrintStream getPrintStream() { return printStream; }
+	    
+	    /**
+	     * Sets the PrintStream for this TracerOutput
+	     * @param pStream a PrintStream object
+	     */
+	    protected void setPrintStream( PrintStream pStream ) { printStream = pStream; }
+                    
+	    //-------------------------------------------------------------------------
+	    // Instance variables
+	    //
+
+	    protected String prefix = "";
+	    protected PrintStream printStream = System.err;
+    }
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/util/tracing/TracerFactory.java b/org.eclipse.osbp.fork.jpos/src/jpos/util/tracing/TracerFactory.java
new file mode 100644
index 0000000..75f7ff2
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/util/tracing/TracerFactory.java
@@ -0,0 +1,327 @@
+package jpos.util.tracing;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+
+import jpos.util.*;
+
+/**
+ * This is a singleton factory used to create Tracer objects and access the
+ * global tracer.  This implementation has the following semantics:
+ * <ol>
+ * <li>Its a Singleton class but can be subclassed if necessary</li>
+ * <li>It caches the default no-named Tracer.  This is the global Tracer</li>
+ * <li>
+ * It caches the Tracer objects according to name and any access for the 
+ * same named Tracer will return the same Tracer object
+ * </li>
+ * </ol>
+ * @see com.ibm.jutil.tracing.Tracer#getInstance
+ * @author E. Michael Maximilien
+ * @since 2.1.0
+ */
+public class TracerFactory extends Object
+{
+    //-------------------------------------------------------------------------
+    // Ctor
+    //
+
+    /** Make ctor protected to avoid construction (this is a Singleton class) */
+    protected TracerFactory() {}
+
+    //-------------------------------------------------------------------------
+    // Public class methods
+    //
+
+    /** @return the sole instance of this class (creating it if necessary) */
+    public static TracerFactory getInstance()
+    {
+        if( instance == null )
+        {
+            instance = new TracerFactory();
+            instance.init();
+        }
+
+        return instance;
+    }
+    
+    //-------------------------------------------------------------------------
+    // Public methods
+    //
+    
+    /** 
+     * Sets the File that all subsequently created Tracer objects will print to
+     * if these Tracer objects are turned on.  Successfully calling this method
+     * overrides the current setting for TracerOutput to files
+     * @throws java.io.IOException if a PrintStream could not be created from File
+     */
+    public void setOutputFile( File file ) throws IOException
+    {
+    	//<todo/>
+    }
+    
+    /** 
+     * @return the global no named Tracer object -- creates it if necessary
+     * Its state is determined by the jutil.properties value
+     */
+    public Tracer createGlobalTracer() { return globalTracer; }
+
+    /** 
+     * @return the global no named Tracer object -- creates it if necessary
+     * Its state is determined by the jutil.properties value
+     * @param b the boolean parameter for the initial state of the tracer
+     */
+    public Tracer createGlobalTracer( boolean b ) 
+    { 
+    	globalTracer.setOn( b );
+    	return globalTracer;
+    }
+
+    /** 
+     * @return creates (if necessary) and return the Tracer with named specified
+     * Its state is determined by the jutil.properties value
+     * @param name the Tracer name
+     */
+    public Tracer createTracer( String name ) 
+    { 
+    	if( tracerMap.containsKey( name ) )
+    		return (Tracer)tracerMap.get( name );
+    		
+    	Tracer tracer = new Tracer( name );
+    	
+    	if( namedTracerState.containsKey( name ) )
+    		tracer.setOn( ( (Boolean)namedTracerState.get( name ) ).booleanValue() );
+    	else
+    		tracer.setOn( false );
+    		
+		if( turnOnAllNamedTracers ) tracer.setOn( true );
+    	
+    	tracerMap.put( name, tracer );
+    	
+    	return tracer;
+    }
+
+    /** 
+     * @return creates (if necessary) and return the Tracer with named specified
+     * Its state is determined by the jutil.properties value
+     * @param name the Tracer name
+     * @param b the boolean parameter for the initial state of the tracer
+     */
+    public Tracer createTracer( String name, boolean b ) 
+    { 
+    	Tracer tracer = createTracer( name );
+    	tracer.setOn( b );
+    	
+    	return tracer;
+    }
+
+    //-------------------------------------------------------------------------
+    // Protected methods
+    //
+    
+    /** 
+     * Finalizes this Tracer by closing the TracerOutput.  This is useful
+     * if the TracerOutput is printing to a file.  This method would then
+     * close that file
+     * @throws java.lang.Thowable any exception occuring while finalizing
+     */
+    protected void finalize()
+    {
+    	if( printStream != null ) printStream.close();
+    }
+     
+    //-------------------------------------------------------------------------
+    // Private methods
+    //
+    
+    /**
+     * @return true if the propertyValue passed is valid and is equals (ignoring
+     * case) to TRUE or YES
+     * @param propValue the property value to check
+     */
+    private boolean isPropertyTrue( String propValue )
+    {
+    	if( propValue == null ) return false;
+    	
+        if( propValue.
+            equalsIgnoreCase( JposProperties.TRACING_ON_PROP_VALUE ) ||
+            propValue.
+            equalsIgnoreCase( JposProperties.TRACING_TRUE_PROP_VALUE ) )
+			return true;
+			
+		return false;
+    }
+
+    /** Intialize the current instance using the DefaultProperties class */
+    private void init()
+    {
+        JposProperties props = new DefaultProperties();
+        props.loadJposProperties();
+        
+		initGlobalTracer( props );
+		initTurnedOnTracers( props );
+		initNamedTracers( props );
+		initTracerOutput();
+    }
+
+	/**
+	 * Initializes the state of the globalTracer -not named
+	 * @param props the JposProperties instance
+	 */
+	private void initGlobalTracer( JposProperties props )
+	{
+        if( !props.isPropertyDefined( TRACING_PROP_NAME ) )
+            globalTracer.setOn( false );
+        else
+        {
+            String tracingPropValue = 
+                   props.getPropertyString( TRACING_PROP_NAME );
+
+            if( isPropertyTrue( tracingPropValue ) )
+                globalTracer.setOn( true );
+        }
+	}
+
+	/**
+	 * Sets to on all named tracers listed in the value of the... 
+	 * TurnOnNamedTracers property
+	 * @param props the JposProperties instance
+	 */
+	private void initTurnedOnTracers( JposProperties props )
+	{
+		if( props.isPropertyDefined( TURN_ON_ALL_NAMED_TRACERS_PROP_NAME ) )
+		{
+			String turnOnAllNamedTracersValue = props.
+			getPropertyString( TURN_ON_ALL_NAMED_TRACERS_PROP_NAME );
+			
+			if( isPropertyTrue( turnOnAllNamedTracersValue ) )
+				turnOnAllNamedTracers = true;
+			else
+				turnOnAllNamedTracers = false;
+		}
+		else		
+		if( props.isPropertyDefined( TURN_ON_NAMED_TRACERS_PROP_NAME ) )
+		{			
+			List turnOnNamedTracersList = 
+			     props.getStringListProperty( TURN_ON_NAMED_TRACERS_PROP_NAME );
+			
+			for( int i = 0; i < turnOnNamedTracersList.size(); ++i )
+			{
+				String tracerName = turnOnNamedTracersList.get( i ).toString();
+                namedTracerState.put( tracerName, Boolean.TRUE );
+			}			
+		}
+	}
+
+	/**
+	 * Initializes the state of all named Tracer objects
+	 * @param props the JposProperties instance
+	 */
+	private void initNamedTracers( JposProperties props )
+	{
+		Enumeration propNames = props.getPropertyNames();
+		
+		while( propNames.hasMoreElements() )
+		{
+			String propName = (String)propNames.nextElement();
+						
+			if( propName.startsWith( TRACER_PROP_NAME ) )
+			{
+				String name = propName.
+				              substring( ( TRACER_PROP_NAME + "." ).length(),
+				                         propName.length() );
+				
+				if( props.isPropertyDefined( propName ) )
+				{
+					String propValue = (String)props.
+					                   getPropertyString( propName );
+					
+		            if( propValue.equalsIgnoreCase( JposProperties.
+		                                            TRACING_ON_PROP_VALUE ) ||
+                		propValue.equalsIgnoreCase( JposProperties.
+                		                            TRACING_TRUE_PROP_VALUE ) )
+		                namedTracerState.put( name, Boolean.TRUE );
+		            else
+		            	namedTracerState.put( name, Boolean.FALSE );
+				}
+			}
+		}
+	}
+
+	/**
+	 * Initializes whether TracerOutput will be to a file or System.err and
+	 * if to a file its location and name.  By default TracerOutput is to
+	 * System.err for all tracers that are turned on
+	 */
+	private void initTracerOutput()
+	{
+		//<todo/>
+	}
+    
+    //-------------------------------------------------------------------------
+    // Private instance variables
+    //
+    
+    private HashMap tracerMap = new HashMap();
+    private HashMap namedTracerState = new HashMap();
+
+	private Tracer globalTracer = Tracer.getInstance();
+
+	private PrintStream printStream = null;
+	
+	private boolean turnOnAllNamedTracers = false;
+
+    //-------------------------------------------------------------------------
+    // Private class variables
+    //
+
+    private static TracerFactory instance = null;
+
+    //-------------------------------------------------------------------------
+    // Class constants
+    //
+    
+    public static final String TRACING_PROP_NAME = "jpos.tracing";
+    
+    public static final String TRACER_PROP_NAME = 
+                                 "jpos.util.tracing.Tracer";
+                               
+    public static final String TURN_ON_NAMED_TRACERS_PROP_NAME = 
+                                 "jpos.util.tracing.TurnOnNamedTracers";
+
+    public static final String TURN_ON_ALL_NAMED_TRACERS_PROP_NAME = 
+                                 "jpos.util.tracing.TurnOnAllNamedTracers";
+                               
+    public static final String TRACER_OUTPUT_TO_FILE_PROP_NAME =
+    						     "jpos.util.tracing.TracerOutputToFile";
+
+	public static final String TRACER_OUTPUT_FILE_NAME_PROP_NAME =
+							     "jpos.util.tracing.TracerOutputFileName";
+	
+	public static final String TRACER_OUTPUT_FILE_LOCATION =
+							     "jpos.util.tracing.TracerOutputFileLocation";
+							   
+	public static final String USER_HOME_LOCATION_VALUE = "<user.home>";					
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/util/tracing/TracerOutput.java b/org.eclipse.osbp.fork.jpos/src/jpos/util/tracing/TracerOutput.java
new file mode 100644
index 0000000..5803c51
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/util/tracing/TracerOutput.java
@@ -0,0 +1,64 @@
+package jpos.util.tracing;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Defines an interface for outputing tracing info
+ * @author E. Michael Maximilien
+ * @since 2.1.0
+ */
+public interface TracerOutput
+{
+    //-------------------------------------------------------------------------
+    // Public methods
+    //
+    
+    /** 
+     * @return any suffix that is to be used with this TracerOutput
+     * <p>An existing suffix gets appended to every message</p>
+     */
+    public String getPrefix();
+    
+    /**
+     * Closes the TracerOutput.  If it is a file then closes the file
+     * Any errors are not propagated up and rather printed to the System.errr
+     */
+    void close();
+
+    /**
+     * Prints a string appended with a new line to the tracer output
+     * @param s the String to print
+     */
+    public void println( String s );
+
+    /**
+     * Prints a string appended without a new line to the tracer output
+     * @param s the String to print
+     */
+    public void print( String s );
+    
+    /**
+     * Prints a StackTrace from an Exception object.
+     * @param e the Exception to extract StackTrace from
+     */
+    public void print( Exception e );
+    
+    /** Flushes the output */
+    public void flush();
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.jpos/src/jpos/util/tracing/Tracing.java b/org.eclipse.osbp.fork.jpos/src/jpos/util/tracing/Tracing.java
new file mode 100644
index 0000000..60e012d
--- /dev/null
+++ b/org.eclipse.osbp.fork.jpos/src/jpos/util/tracing/Tracing.java
@@ -0,0 +1,77 @@
+package jpos.util.tracing;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This software is provided "AS IS".  The JavaPOS working group (including
+// each of the Corporate members, contributors and individuals)  MAKES NO
+// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
+// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
+// any damages suffered as a result of using, modifying or distributing this
+// software or its derivatives. Permission to use, copy, modify, and distribute
+// the software and its documentation for any purpose is hereby granted. 
+//
+// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
+// is an OSS Apache-like license.  The complete license is located at:
+//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
+//
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Tracing class to help in the debugging of other package code
+ * This class uses the Tracer class for all its static methods implementations
+ * its a convinient class to avoid having to cache the Tracer object or having
+ * to do Tracer.getInstance() everytime you need to access the Tracer.
+ * @see jpos.util.Tracer#getInstance
+ * @author E. Michael Maximilien
+ */
+public class Tracing extends Object
+{
+    //-------------------------------------------------------------------------
+    // Ctor
+    //
+
+    /** Make ctor private to avoid construction */
+    private Tracing() {}
+
+    //-------------------------------------------------------------------------
+    // Public class methods
+    //
+
+    /**
+     * Class method that facilitate usage of Tracer.println() method
+     * @param obj the Object to print -- obj.toString()
+     */
+    public static void println( Object obj ) { tracer.println( obj.toString() ); }
+
+    /**
+     * Class print method that facilitate usage Tracer.print() method
+     * @param obj the Object to print -- obj.toString()
+     */
+    public static void print( Object obj ) { tracer.print( obj.toString() ); }
+
+    /**
+     * Prints a StackTrace from an Exception object.
+     * @param e the Exception to extract StackTrace from
+     */
+    public static void print( Exception e ) { tracer.print( e ); }
+    
+    /** Flushes the TracerOutput */
+    public static void flush() { tracer.flush(); }
+
+    /**
+     * Sets this tracer ON or OFF
+     * @param b the boolean parameter
+     */
+    public static void setOn( boolean b ) { tracer.setOn( b ); }
+
+    /** @return true if the tracer is ON (i.e. enabled) */
+    public static boolean isOn() { return tracer.isOn(); }
+    
+    //---------------------------------------------------------------------------
+    // Class variables
+    //
+    
+    private static Tracer tracer = TracerFactory.getInstance().createGlobalTracer();
+}
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..90d8e9c
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+#=======================================================================
+# Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany).
+# This program and the accompanying materials are made available under the 
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+# 
+# SPDX-License-Identifier: EPL-2.0
+# 
+# Contributors:
+# Loetz GmbH&Co.KG - initial API and implementation 
+# CQ: https://dev.eclipse.org/ipzilla/show_bug.cgi?id=14786
+#=======================================================================
+-->
+<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.osbp.releng.maven</groupId>
+        <artifactId>org.eclipse.osbp.releng.maven.parent.tycho</artifactId>
+        <version>0.9.0-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.eclipse.osbp.fork.jpos</groupId>
+    <artifactId>org.eclipse.osbp.fork.jpos.aggregator</artifactId>
+    <version>1.14.0-SNAPSHOT</version>
+    <packaging>pom</packaging>
+
+    <url>${osbp.site.repository.url}</url>
+    <scm>
+        <url>${osbp.scm.url}</url>
+        <connection>${osbp.scm.connection}</connection>
+        <developerConnection>${osbp.scm.connection.dev}</developerConnection>
+        <tag>HEAD</tag>
+    </scm>
+    <distributionManagement>
+        <site>
+            <id>gh-pages</id>
+            <name>OSBP GitHub Pages</name>
+            <url>${distribution.site.url}</url>
+        </site>
+    </distributionManagement>
+
+    <properties>
+        
+		<osbp.gitrepo.name>${project.groupId}</osbp.gitrepo.name>
+    </properties>
+
+    <modules>
+        <module>org.eclipse.osbp.fork.jpos</module>
+        <module>org.eclipse.osbp.fork.jpos.feature</module>
+    </modules>
+
+    <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-javadoc-plugin</artifactId>
+                    <configuration>
+                        <skip>true</skip>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <groupId>org.eclipse.tycho</groupId>
+                    <artifactId>target-platform-configuration</artifactId>
+                    <version>${tycho-version}</version>
+                    <configuration>
+                        <resolver>p2</resolver>
+                        <pomDependencies>consider</pomDependencies>
+                        <environments>
+                            <environment>
+                                <os>win32</os>
+                                <ws>win32</ws>
+                                <arch>x86</arch>
+                            </environment>
+                            <environment>
+                                <os>win32</os>
+                                <ws>win32</ws>
+                                <arch>x86_64</arch>
+                            </environment>
+                            <environment>
+                                <os>linux</os>
+                                <ws>gtk</ws>
+                                <arch>x86</arch>
+                            </environment>
+                            <environment>
+                                <os>linux</os>
+                                <ws>gtk</ws>
+                                <arch>x86_64</arch>
+                            </environment>
+                            <environment>
+                                <os>macosx</os>
+                                <ws>cocoa</ws>
+                                <arch>x86_64</arch>
+                            </environment>
+                        </environments>
+                    </configuration>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+</project>