diff --git a/java/uml/ch.ntb.usb.uml b/java/uml/ch.ntb.usb.uml
index 7730d0d..b14af63 100644
--- a/java/uml/ch.ntb.usb.uml
+++ b/java/uml/ch.ntb.usb.uml
@@ -53,7 +53,7 @@
+VhQCvPWpkq9N+U+GjchOQAA
jGVxNbYj00Chrjdm4wEWXAAA
-28
+32
clMaroon
$00B9FFFF
@@ -77,7 +77,7 @@
clMaroon
$00B9FFFF
-500
+448
216
113
53
@@ -108,7 +108,7 @@
clMaroon
$00B9FFFF
-620
+596
272
131
68
@@ -121,14 +121,14 @@ LibUsb-Win32 API.
clMaroon
$00B9FFFF
-609,268;620,273
+560,264;596,279
kFuXbRCvX0OxyJYGXAJ2NwAA
bj7RYkSMO0qIEP8jkhRPkgAA
clMaroon
$00B9FFFF
-492
+440
108
140
59
@@ -159,7 +159,7 @@ LibUsb-Win32 API.
clMaroon
$00B9FFFF
-560,166;557,216
+508,166;505,216
bHBJ2iMT1Emo3/z1QruACAAA
bj7RYkSMO0qIEP8jkhRPkgAA
2BBmOZlXy0elqrvf1Pfb0QAA
@@ -964,7 +964,7 @@ LibUsb-Win32 API.
clMaroon
$00B9FFFF
-172
+80
112
253
56
@@ -995,8 +995,8 @@ LibUsb-Win32 API.
clMaroon
$00B9FFFF
-12
-144
+24
+200
129
57
A device factory which
@@ -1007,14 +1007,14 @@ all device instances.
clMaroon
$00B9FFFF
-140,162;172,157
+125,200;169,167
6dw/hbnfL0KObRrJlTOaOAAA
QgnPJMfYfkKI63CxIbKrUQAA
clMaroon
$00B9FFFF
-507,268;431,308
+470,268;418,308
CUdyl1aeZ0+5m6T7YR+ScwAA
aFv0LI7ePk6WALpiWziNnAAA
bj7RYkSMO0qIEP8jkhRPkgAA
@@ -1116,7 +1116,7 @@ type Usb_Bus
clMaroon
$00B9FFFF
-160
+228
244
101
41
@@ -1127,14 +1127,14 @@ type Usb_Device
clMaroon
$00B9FFFF
-238,308;223,284
+260,308;270,284
Pv0Pt3qkZkmPtYeARmmwEAAA
EmkgqCDDHEeVmq/pvU4k2gAA
clMaroon
$00B9FFFF
-424,138;492,138
+332,138;440,137
E/QwNfFGUEiitlqp99S36AAA
2BBmOZlXy0elqrvf1Pfb0QAA
6dw/hbnfL0KObRrJlTOaOAAA
@@ -1215,9 +1215,231 @@ type Usb_Device
ym/t3t4KOkinRJAqyF+HwQAA
+
+clMaroon
+$00B9FFFF
+656
+92
+89
+56
+p/wk8BA7x0OTRXXHy0OJmgAA
+
+
+1
+USBException
+
+
+<<exception>>
+
+
+False
-12
+
+p/wk8BA7x0OTRXXHy0OJmgAA
+
+
+p/wk8BA7x0OTRXXHy0OJmgAA
+
+
+
+clMaroon
+$00B9FFFF
+628
+168
+134
+56
+nCivixeClUeJ/8WDflvLoAAA
+
+
+1
+USBTimeoutException
+
+
+<<exception>>
+
+
+False
+
+
+
+nCivixeClUeJ/8WDflvLoAAA
+
+
+nCivixeClUeJ/8WDflvLoAAA
+
+
+
+clMaroon
+$00B9FFFF
+579,130;656,123
+3Xd7YkTVeUijpP0dxF3K9wAA
+1cUBYeKUdUuMBdS17locfgAA
+2BBmOZlXy0elqrvf1Pfb0QAA
+
+False
+1.5707963267949
+15
+3Xd7YkTVeUijpP0dxF3K9wAA
+
+
+False
+1.5707963267949
+30
+3Xd7YkTVeUijpP0dxF3K9wAA
+
+
+False
+-1.5707963267949
+15
+3Xd7YkTVeUijpP0dxF3K9wAA
+
+
+False
+-0.523598775598299
+30
+epHead
+PCKabEdsC0+42T+WCC0J+gAA
+
+
+False
+0.523598775598299
+30
+epTail
+RwLaC/BiAE+6PNyQNM7DRwAA
+
+
+False
+0.523598775598299
+25
+epHead
+PCKabEdsC0+42T+WCC0J+gAA
+
+
+False
+-0.523598775598299
+25
+epTail
+RwLaC/BiAE+6PNyQNM7DRwAA
+
+
+False
+-0.785398163397448
+40
+epHead
+PCKabEdsC0+42T+WCC0J+gAA
+
+
+False
+0.785398163397448
+40
+epTail
+RwLaC/BiAE+6PNyQNM7DRwAA
+
+
+False
+-1000
+-1000
+50
+8
+PCKabEdsC0+42T+WCC0J+gAA
+
+
+False
+-1000
+-1000
+50
+8
+RwLaC/BiAE+6PNyQNM7DRwAA
+
+
+
+clMaroon
+$00B9FFFF
+579,159;628,174
+juy2GOZNhkq5f7cp9rQyWQAA
+m44pRtEbJU63JQyFoCCxtAAA
+2BBmOZlXy0elqrvf1Pfb0QAA
+
+False
+1.5707963267949
+15
+juy2GOZNhkq5f7cp9rQyWQAA
+
+
+False
+1.5707963267949
+30
+juy2GOZNhkq5f7cp9rQyWQAA
+
+
+False
+-1.5707963267949
+15
+juy2GOZNhkq5f7cp9rQyWQAA
+
+
+False
+-0.523598775598299
+30
+epHead
+cJakFa0mdEChcxEhYeDaKwAA
+
+
+False
+0.523598775598299
+30
+epTail
+RJcA8VyDe0K2sWOwSOHLiwAA
+
+
+False
+0.523598775598299
+25
+epHead
+cJakFa0mdEChcxEhYeDaKwAA
+
+
+False
+-0.523598775598299
+25
+epTail
+RJcA8VyDe0K2sWOwSOHLiwAA
+
+
+False
+-0.785398163397448
+40
+epHead
+cJakFa0mdEChcxEhYeDaKwAA
+
+
+False
+0.785398163397448
+40
+epTail
+RJcA8VyDe0K2sWOwSOHLiwAA
+
+
+False
+-1000
+-1000
+50
+8
+cJakFa0mdEChcxEhYeDaKwAA
+
+
+False
+-1000
+-1000
+50
+8
+RJcA8VyDe0K2sWOwSOHLiwAA
+
+
+
+
+16
ch.ntb.usb
+VhQCvPWpkq9N+U+GjchOQAA
@@ -1244,11 +1466,38 @@ type Usb_Device
vtJgj9fKHUOv3MF6LiZuaQAA
hWPO+G2l6UamJ9XP1xsU6gAA
4gcdaLKmOESleWMoU/ITdgAA
+2
+
+USBException
+NDp8e0ch10ST3dwxWPam4AAA
+3
+1cUBYeKUdUuMBdS17locfgAA
+xvrkkvaXsEyKlXkeArvn6gAA
+9XjxPvkTzUW160zoJoXJIgAA
+2
+jAq2OWym/0CBShdxKGVvTgAA
+PCKabEdsC0+42T+WCC0J+gAA
+
+
+USBTimeoutException
+NDp8e0ch10ST3dwxWPam4AAA
+3
+m44pRtEbJU63JQyFoCCxtAAA
+8ptu2+IQEkiODfeNkzBbIAAA
+NCd0z6hUJUKirt04Te6MmAAA
+2
+jB8ocTwTXEuDjkXR5KY03QAA
+cJakFa0mdEChcxEhYeDaKwAA
+
1
S86PfEMMVEitYamqNGrOKgAA
-2
+6
9KWfrYr7HUmfL2Kub4NWjQAA
tXktVESMQUOZFggmJCAGDAAA
+gnNEskLBlEGy68pKD58J3gAA
+gMOdBarVEUi69aAllgtqSAAA
+RwLaC/BiAE+6PNyQNM7DRwAA
+RJcA8VyDe0K2sWOwSOHLiwAA
Usb_Bus
@@ -1387,8 +1636,8 @@ type Usb_Device
NDp8e0ch10ST3dwxWPam4AAA
4
HnV1GDlOlUiEzDCgg3OVnwAA
-T54kLOtp70+07rCDysRoRgAA
-3vJXTt9Ud0+cklGb7VirjwAA
+3vJXTt9Ud0+cklGb7VirjwAA
+T54kLOtp70+07rCDysRoRgAA
ZmEyokBAfUuimbUqLhInLAAA
@@ -1396,8 +1645,8 @@ type Usb_Device
Y0tGKOGA/UquqP1qaYDayQAA
4
nP4i5P/O2UWgSJEnuXrNGAAA
-qnQYuly9P0ePfBPLyOhoUgAA
-NbkMFiV5UUyU8V6ZyNh/ggAA
+NbkMFiV5UUyU8V6ZyNh/ggAA
+qnQYuly9P0ePfBPLyOhoUgAA
KiPq8wTTI02Bz5cifJGqSAAA
@@ -1415,8 +1664,8 @@ type Usb_Device
fKheOe+4606Ei/JrIdvAnwAA
4
OYIH3ymdpUit+s9rXvgX4QAA
-tGs9/SOEbkuqTf609sd2uQAA
-2cgp4vLw00iUpTcWm5nXagAA
+2cgp4vLw00iUpTcWm5nXagAA
+tGs9/SOEbkuqTf609sd2uQAA
wlFJ5gxqB0W1JznjbhR82wAA
@@ -1425,8 +1674,8 @@ type Usb_Device
CYy/2ClqUUO8tWkJYxc3EwAA
4
tvTF0QXyTkOU+lco6nawpAAA
-E2JhEcUXZkeaMU/vi7BgQwAA
-OlG/OTSXdkeeQhih0vfj2gAA
+OlG/OTSXdkeeQhih0vfj2gAA
+E2JhEcUXZkeaMU/vi7BgQwAA
Pgiug9F5sEm6RGjxSJwN0QAA
@@ -1458,8 +1707,8 @@ type Usb_Device
CYy/2ClqUUO8tWkJYxc3EwAA
4
VnH93Y/7IkaJYl+DPinjmwAA
-gX2CUgfdCki+IWGLlwLwBgAA
-J87I73G/nkuAKdCKS1ov3AAA
+J87I73G/nkuAKdCKS1ov3AAA
+gX2CUgfdCki+IWGLlwLwBgAA
8AgdepV+YECTfuxJBIqCCwAA
@@ -1468,8 +1717,8 @@ type Usb_Device
BhOtKDs6x0a1MSfBURjV3wAA
4
1qxaXx2+hEq1Na+Bk3itGQAA
-jbg1/Hojq0CDpZmGOngZ8gAA
-FePC/A0aMEGuAW8YyMNUfQAA
+FePC/A0aMEGuAW8YyMNUfQAA
+jbg1/Hojq0CDpZmGOngZ8gAA
XyLeWJl15kSVqLBfioHjpwAA
@@ -1487,8 +1736,8 @@ type Usb_Device
CYy/2ClqUUO8tWkJYxc3EwAA
4
uBprnnKYk0qBu9UZ9bv+5wAA
-21oCmtYmTk6I99TNGY+WmQAA
-uUm65cZr+USoFHmg+9GOTAAA
+uUm65cZr+USoFHmg+9GOTAAA
+21oCmtYmTk6I99TNGY+WmQAA
CEBGmwNSDE+W0wJ/aQr5ogAA
@@ -1497,8 +1746,8 @@ type Usb_Device
WnjxeWRoQE+dRj+3+FKmAAAA
4
q/Tjz7MsSkCzN45MnaE+ygAA
-9Z0KUb7BbUO7F3MYIOiSrQAA
-Ct5Onzw2LES6ewhEa/3NWQAA
+Ct5Onzw2LES6ewhEa/3NWQAA
+9Z0KUb7BbUO7F3MYIOiSrQAA
cY/H4Djf5kicM3tDZOwWkAAA
@@ -1516,8 +1765,8 @@ type Usb_Device
WnjxeWRoQE+dRj+3+FKmAAAA
4
ElMIvqx9s0qrTOxejhsaSQAA
-tjnuHlEOBk2grTlQ+kPGnQAA
-/avxLTDZe0qmoKyO79Gi7AAA
+/avxLTDZe0qmoKyO79Gi7AAA
+tjnuHlEOBk2grTlQ+kPGnQAA
oS91czwGhEKtYBANVGPPnwAA
@@ -1526,8 +1775,8 @@ type Usb_Device
s3tyNjh10EOlP9fTFKCHzgAA
4
YlWEGJVu1Eu9BEa5L9YqyQAA
-PpS7OEegzUeBhCrBHXgkwAAA
-upJz60gOiE2Y6jwQzzUoqQAA
+upJz60gOiE2Y6jwQzzUoqQAA
+PpS7OEegzUeBhCrBHXgkwAAA
XVazEpRSqkyH0zMCJgEnBAAA
@@ -1545,8 +1794,8 @@ type Usb_Device
s3tyNjh10EOlP9fTFKCHzgAA
4
lo8h2SqcoUeOOUPAe0EjdAAA
-VQ4ysUxS306j02ouNykrpwAA
-mv0gaJr3SUeuVY1xo1FdowAA
+mv0gaJr3SUeuVY1xo1FdowAA
+VQ4ysUxS306j02ouNykrpwAA
+GMHnNNOiEW2P4PaNnKcsgAA
@@ -1555,8 +1804,8 @@ type Usb_Device
1ZxdCeSlnke1mOXmwZo44gAA
4
/cDNFyyj1kKTrWJ1HeW7jwAA
-eq+vp2GL9Ey4am7PZZZvYwAA
-T7Yrg8efIE2hhid6kOwp/AAA
+T7Yrg8efIE2hhid6kOwp/AAA
+eq+vp2GL9Ey4am7PZZZvYwAA
HB0H112qzU65avMG65s6+AAA
@@ -1574,8 +1823,8 @@ type Usb_Device
1ZxdCeSlnke1mOXmwZo44gAA
4
Wf6tv7bE1kq7mrxCiOa+SQAA
-e6lrE15aj0SZAg2c/y97hgAA
-3TeYQ+z3sUaWb3mqCq5ZswAA
+3TeYQ+z3sUaWb3mqCq5ZswAA
+e6lrE15aj0SZAg2c/y97hgAA
B4mF3KmBkEmmqPeQhru4awAA
@@ -1584,8 +1833,8 @@ type Usb_Device
r8we3ZgdtE+PkC4ethr1xgAA
4
lhChbObcCU2CcZDalktiVQAA
-QIJa01TJ8UWewFDbze7RZwAA
-eX+Li7xw8Eu7Q+WVQJ7NWgAA
+eX+Li7xw8Eu7Q+WVQJ7NWgAA
+QIJa01TJ8UWewFDbze7RZwAA
z9YWV6a+CkmXxyniylWBegAA
@@ -1603,8 +1852,8 @@ type Usb_Device
Y0tGKOGA/UquqP1qaYDayQAA
4
cJO2BE8tMk6Vdt7DH7oXUgAA
-mEJVUc0onE+FHNS1qwcDygAA
-ztnLte7rf0CX37ncwAxYbgAA
+ztnLte7rf0CX37ncwAxYbgAA
+mEJVUc0onE+FHNS1qwcDygAA
dg0oZAkRp02LqrBKRlJGygAA
@@ -1613,8 +1862,8 @@ type Usb_Device
fKheOe+4606Ei/JrIdvAnwAA
4
ACS3R0vnCkiCG7/+fEq01gAA
-PvH2F0s2CU+u9nUzCb6FmwAA
-6bLwfBAaDE6zqua+j7Jf+wAA
+6bLwfBAaDE6zqua+j7Jf+wAA
+PvH2F0s2CU+u9nUzCb6FmwAA
+s+HLixVdk+3Jjh1dYo5NgAA
@@ -1645,8 +1894,8 @@ type Usb_Device
uDTqegf/MkeBHojXFEOLGwAA
4
k9T1VNzEo0ufuAB6TN2QRwAA
-Tu5aL5lgO0ut/RTBGjiKqAAA
-oiCIMGX8ik6YjhRQQxB8OQAA
+oiCIMGX8ik6YjhRQQxB8OQAA
+Tu5aL5lgO0ut/RTBGjiKqAAA
iDNEYw6KL0uVCCKPtWa8bwAA
@@ -1655,11 +1904,91 @@ type Usb_Device
NDp8e0ch10ST3dwxWPam4AAA
4
4Vg7xm7w902Ov8oTfg9PSAAA
-FngPhombp0y5VL3elyPMMgAA
-DWRmEP/U1kOcrZnzyvRnXQAA
+DWRmEP/U1kOcrZnzyvRnXQAA
+FngPhombp0y5VL3elyPMMgAA
ETXPzMurVEmlbvocuDXtVwAA
+
++VhQCvPWpkq9N+U+GjchOQAA
+2
+
+V1q5qLSIxEidFrrPCOFqIgAA
+NDp8e0ch10ST3dwxWPam4AAA
+
+
+V1q5qLSIxEidFrrPCOFqIgAA
+p/wk8BA7x0OTRXXHy0OJmgAA
+
+
+
++VhQCvPWpkq9N+U+GjchOQAA
+2
+
+7Niy2MZhPUynlh2A2zVkEQAA
+NDp8e0ch10ST3dwxWPam4AAA
+
+
+7Niy2MZhPUynlh2A2zVkEQAA
+nCivixeClUeJ/8WDflvLoAAA
+
+
+
++VhQCvPWpkq9N+U+GjchOQAA
+4
+Rk0gcRI5ikapDGR7M2bn5AAA
+HXSRZ0W7C02e+CDSTe+vQgAA
+39P+Jod7A0SpXNClHK/bIwAA
+FOp7UHIFjUmRJarTRH6h3AAA
+2
+
+False
+3Xd7YkTVeUijpP0dxF3K9wAA
+NDp8e0ch10ST3dwxWPam4AAA
+4
+IIOw3R07h0mYIbxgQNAvlgAA
+Ilbnf/apgU2JUqlCax0E0AAA
+6DAAoxE3gE6btQ3QR6zXSAAA
+GWJjJWM040mgOfcnzTwGqgAA
+
+
+3Xd7YkTVeUijpP0dxF3K9wAA
+p/wk8BA7x0OTRXXHy0OJmgAA
+4
+Mf6lj8hCekmAt8LSuv0gPQAA
+gZyJB5c8j0qqNEv58A7qkQAA
+roosZQXLT0uL9JG9OjvfIQAA
+jGiYNVwhsUqy+u4GsecJkwAA
+
+
+
++VhQCvPWpkq9N+U+GjchOQAA
+4
+Mp4OVq4lq0Ot63a04V2k0AAA
+gef03vYxbUeRLVhwDqSRtwAA
+vk1lNcjPWk2tPqsfZgpaNgAA
+1F1Ggg3l7kq2YUNbccrRzAAA
+2
+
+False
+juy2GOZNhkq5f7cp9rQyWQAA
+NDp8e0ch10ST3dwxWPam4AAA
+4
+zO1s01kJIE6XkTjlSB6aywAA
+UxK4awc9BUaq32wB9ulIlQAA
+W9sijr2Fr02bK6wbKT19/wAA
+62JK0r9fykSMDnmw3ZuktgAA
+
+
+juy2GOZNhkq5f7cp9rQyWQAA
+nCivixeClUeJ/8WDflvLoAAA
+4
+NlVzv49r5EKp3NXgP9SJUgAA
+S2waQNcxi0SMzX3GtK14MwAA
+2Q3xA4DACkm0S1EmjZ54IwAA
+hN0Adta+JUWLfSVgHKKVEgAA
+
+
Implementation Model