Merge jv
authorJan Vrany <jan.vrany@fit.cvut.cz>
Thu, 30 Jun 2016 21:12:35 +0100
branchjv
changeset 20079 8d884971c2ed
parent 20078 a680abc90e84 (current diff)
parent 20051 39bebeec96b2 (diff)
child 20080 093324d7a47c
Merge
ApplicationDefinition.st
Behavior.st
CachingRegistry.st
Character.st
CharacterArray.st
CharacterEncoder.st
CharacterEncoderError.st
Collection.st
ExternalStream.st
Float.st
HandleRegistry.st
IdentityDictionary.st
ImmutableString.st
LibraryDefinition.st
LinkedList.st
Make.proto
Make.spec
Method.st
Object.st
OrderedCollection.st
PCFilename.st
PipeStream.st
ProjectDefinition.st
Rectangle.st
Registry.st
SequenceableCollection.st
Set.st
ShortFloat.st
SmallInteger.st
Smalltalk.st
SmalltalkLanguage.st
SortedCollection.st
String.st
UnixOperatingSystem.st
WeakArray.st
WeakDependencyDictionary.st
WeakIdentityDictionary.st
abbrev.stc
bc.mak
libInit.cc
stx_libbasic.st
--- a/.hgtags	Thu Jun 30 21:11:02 2016 +0100
+++ b/.hgtags	Thu Jun 30 21:12:35 2016 +0100
@@ -20,6 +20,7 @@
 484307b07a7b64f21b0a6dd83d5856556904a435 expecco_2_9_0
 484307b07a7b64f21b0a6dd83d5856556904a435 expecco_2_9_0_a
 484307b07a7b64f21b0a6dd83d5856556904a435 expecco_2_9_0_win75_lx36
+484307b07a7b64f21b0a6dd83d5856556904a435 expecco_2_9_1
 508e9e5d9254027c7f4aed4fe7734dab793e5230 expecco_ALM_1_9_7
 59d0cc49b9442979ff138bc2424f588e8a533c2f expecco_1_7_0rc3
 602e61cb64a3aaa674fbaf01705064701f2f5c14 expecco_2_2_5
--- a/ApplicationDefinition.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/ApplicationDefinition.st	Thu Jun 30 21:12:35 2016 +0100
@@ -16,10 +16,10 @@
 "{ NameSpace: Smalltalk }"
 
 ProjectDefinition subclass:#ApplicationDefinition
-        instanceVariableNames:''
-        classVariableNames:''
-        poolDictionaries:''
-        category:'System-Support-Projects'
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'System-Support-Projects'
 !
 
 !ApplicationDefinition class methodsFor:'documentation'!
@@ -798,18 +798,6 @@
     ^ self packageName,'.nsi'.
 
     "Created: / 14-09-2006 / 21:03:41 / cg"
-!
-
-rcFilename
-    ^ self packageName,'WinRC.rc'.
-
-    "Created: / 07-09-2006 / 17:07:08 / cg"
-!
-
-resourceFilename
-    ^ (self rcFilename asFilename withSuffix:'$(RES)') name
-
-    "Created: / 07-09-2006 / 17:12:53 / cg"
 ! !
 
 !ApplicationDefinition class methodsFor:'file mappings'!
@@ -1408,7 +1396,7 @@
 
 generateAllPreRequisiteLibs_modules_dot_stx
     ^ String streamContents:[:s |
-        self allPreRequisitesWithMandatorySorted do:[:projectID | 
+        self allPreRequisitesSorted do:[:projectID | 
             (self shouldBeLoadedInitially:projectID) ifFalse:[
                 s nextPut:$*.
             ].
@@ -1425,7 +1413,7 @@
      exept_expecco_application generateAllPreRequisiteLibs_modules_dot_stx
     "
 
-    "Modified: / 06-06-2016 / 14:31:09 / cg"
+    "Modified: / 07-09-2006 / 17:22:58 / cg"
 !
 
 generateExtensionLine: extensionLineTemplate
@@ -1463,7 +1451,7 @@
 generatePreRequisiteLines_bc_dot_mak         
 
     ^ String streamContents:[:s |
-        self allPreRequisitesWithMandatorySorted do:[:eachPackage |
+        self allPreRequisitesSorted do:[:eachPackage |
             |mappings newObjectLine|
             mappings := self preRequisiteLine_bc_dot_mak_mappings: eachPackage.
             newObjectLine := self replaceMappings: mappings
@@ -1486,12 +1474,13 @@
     "
 
     "Created: / 09-08-2006 / 11:24:39 / fm"
-    "Modified: / 06-06-2016 / 14:33:30 / cg"
+    "Modified: / 14-09-2006 / 21:58:47 / cg"
 !
 
 generatePreRequisiteLines_make_dot_proto        
+
     ^ String streamContents:[:s |
-        self allPreRequisitesWithMandatorySorted do:[:eachPackage |
+        self allPreRequisitesSorted do:[:eachPackage |
             |mappings newObjectLine|
             mappings := self preRequisiteLine_make_dot_proto_mappings: eachPackage.
             newObjectLine := self replaceMappings: mappings
@@ -1514,32 +1503,31 @@
     "
 
     "Created: / 09-08-2006 / 11:24:39 / fm"
-    "Modified: / 06-06-2016 / 14:33:55 / cg"
+    "Modified: / 14-09-2006 / 21:58:47 / cg"
 !
 
 generateRequiredLibobjs_make_dot_proto
     ^ String streamContents:[:s |
-        self allPreRequisitesWithMandatorySorted do:[:projectID |
+        self allPreRequisitesSorted do:[:projectID |
             |libobjPath libPath|
 
             libPath := self pathToPackage:projectID withSeparator:'/'.
             libobjPath := libPath , '/', (self libraryNameFor:projectID).
             s space; nextPutAll: libobjPath; nextPutLine:'$(O_EXT) \'.
         ].
+
         s cr.
     ].
 
     "
      exept_expecco_application generateRequiredLibobjs_make_dot_proto      
     "
-
-    "Modified: / 06-06-2016 / 14:34:17 / cg"
 !
 
 generateRequiredLibs_bc_dot_mak
     ^ String streamContents:[:s |
         s nextPutLine:' \'.
-        self allPreRequisitesWithMandatorySorted do:[:projectID | 
+        self allPreRequisitesSorted do:[:projectID | 
             s space; nextPutAll:(self libraryNameFor:projectID); nextPutLine:'.dll \'.
         ].
 
@@ -1560,13 +1548,13 @@
      bosch_dapasx_application generateRequiredLibs_bc_dot_mak      
     "
 
-    "Modified: / 06-06-2016 / 14:34:41 / cg"
+    "Modified: / 07-09-2006 / 17:22:51 / cg"
 !
 
 generateRequiredLibs_make_dot_proto
     "/ cg: why not (self libraryNameFor:projectID),'.so'; ???
     ^ String streamContents:[:s |
-        self allPreRequisitesWithMandatorySorted do:[:projectID |
+        self allPreRequisitesSorted do:[:projectID | 
             s space; nextPutAll:(self libraryNameFor:projectID); nextPutLine:' \'.
         ].
 "/ Subprojects are only built, but not linked to the executable!!
@@ -1585,14 +1573,12 @@
     "
      alspa_batch_application generateRequiredLibs_make_dot_proto      
     "
-
-    "Modified: / 06-06-2016 / 14:34:59 / cg"
 !
 
 generateRequiredLinkLibobjs_make_dot_proto
 
     ^ String streamContents:[:s |
-        self allPreRequisitesWithMandatorySorted do:[:projectID |
+        self allPreRequisitesSorted do:[:projectID | 
             s space; nextPutAll:(self libraryNameFor:projectID),'$(O_EXT)'; nextPutLine:' \'.
         ].
 
@@ -1610,8 +1596,6 @@
     "
      alspa_batch_application generateRequiredLinkLibobjs_make_dot_proto      
     "
-
-    "Modified: / 06-06-2016 / 14:35:15 / cg"
 !
 
 generateSubProjectLibs_bc_dot_mak         
@@ -3087,8 +3071,8 @@
 '%(FILE_NAME).dll: %(MODULE_DIRECTORY)\$(OBJDIR)\%(FILE_NAME).dll
         copy %(MODULE_DIRECTORY)\$(OBJDIR)\%(FILE_NAME).dll *.*
 
-# %(MODULE_DIRECTORY)\$(OBJDIR)\%(FILE_NAME).dll: $(FORCE)
-#        pushd %(MODULE_DIRECTORY) & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+%(MODULE_DIRECTORY)\$(OBJDIR)\%(FILE_NAME).dll: $(FORCE)
+        pushd %(MODULE_DIRECTORY) & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 '
 
     "Modified: / 06-06-2016 / 15:53:51 / cg"
--- a/Behavior.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/Behavior.st	Thu Jun 30 21:12:35 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 1988 by Claus Gittinger
 	      All Rights Reserved
@@ -2118,23 +2120,22 @@
      However, within one inheritance level, there is no specific order,
      in which the entries are enumerated.
      Warning:
-	This will only enumerate globally known classes - for anonymous
-	behaviors, you have to walk over all instances of Behavior."
+        This will only enumerate globally known classes - for anonymous
+        behaviors, you have to walk over all instances of Behavior."
 
     |meta toDo cls|
 
     meta := self isMeta.
 
-    toDo := OrderedCollection new.
-    toDo addAll:self theNonMetaclass subclasses.
+    toDo := self theNonMetaclass subclasses asNewOrderedCollection.
     [toDo notEmpty] whileTrue:[
-	cls := toDo removeFirst.
-	toDo addAll:cls subclasses.
-	meta ifTrue:[
-	    aBlock value:cls class.
-	] ifFalse:[
-	    aBlock value:cls.
-	]
+        cls := toDo removeFirst.
+        toDo addAll:cls subclasses.
+        meta ifTrue:[
+            aBlock value:cls class.
+        ] ifFalse:[
+            aBlock value:cls.
+        ]
     ].
 
 "/    self isMeta ifTrue:[
@@ -5278,3 +5279,4 @@
 version_CVS
     ^ '$Header$'
 ! !
+
--- a/CachingRegistry.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/CachingRegistry.st	Thu Jun 30 21:12:35 2016 +0100
@@ -10,7 +10,8 @@
  hereby transferred.
 "
 "{ Package: 'stx:libbasic' }"
-"{ Package: 'stx:libbasic' }"
+
+"{ NameSpace: Smalltalk }"
 
 Registry subclass:#CachingRegistry
 	instanceVariableNames:'keptReferences cacheSize'
@@ -42,7 +43,7 @@
     However, it keeps hard references to the last n registered objects,
     preventing them from being garbage collected (and finalized).
     This is useful for resources, which do not cost too much memory,
-    but are expensive to allocate - a special canditate of this kind are
+    but are expensive to allocate - a special candidate of this kind are
     XFonts. With a CachingRegistry, fonts are kept a bit longer alive
     and can therefore often be reused - even if temporarily unreferenced.
 
@@ -50,13 +51,13 @@
 
 
     [author:]
-	Claus Gittinger (cg@exept)
+        Claus Gittinger (cg@exept)
 
     [see also:]
 
     [instance variables:]
-	keptObjects             Collection      hard referenced objects
-	cacheSize               Integer         number of hard references
+        keptObjects             Collection      hard referenced objects
+        cacheSize               Integer         number of hard references
 
     [class variables:]
 "
@@ -73,27 +74,29 @@
 
 register:anObject as:aHandle
     keptReferences removeIdentical:anObject ifAbsent:nil.
-    keptReferences addLast:anObject.
-    keptReferences size > cacheSize ifTrue:[
-	keptReferences removeFirst.
+    aHandle notNil ifTrue:[
+        keptReferences addLast:anObject.
+        keptReferences size > cacheSize ifTrue:[
+            keptReferences removeFirst.
+        ].
     ].
     super register:anObject as:aHandle.
 !
 
-repairTally
-    keptReferences := OrderedCollection new:cacheSize.
-    super repairTally.
+removeKey:anObject ifAbsent:absentBlock
+    keptReferences removeIdentical:anObject ifAbsent:nil.
+    super removeKey:anObject ifAbsent:absentBlock.
 !
 
-unregister:anObject atIndex:index
+safeRemoveKey:anObject
     keptReferences removeIdentical:anObject ifAbsent:nil.
-    super unregister:anObject atIndex:index.
+    super safeRemoveKey:anObject.
 ! !
 
 !CachingRegistry class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/CachingRegistry.st,v 1.2 2015-04-21 16:01:16 cg Exp $'
+    ^ '$Header$'
 !
 
 version_SVN
--- a/Character.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/Character.st	Thu Jun 30 21:12:35 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 1988 by Claus Gittinger
 	      All Rights Reserved
@@ -311,7 +313,6 @@
     ^ self codePoint:anInteger
 ! !
 
-
 !Character class methodsFor:'accessing untypeable characters'!
 
 controlCharacter:char
@@ -358,7 +359,6 @@
     ^ self codePoint:41
 ! !
 
-
 !Character class methodsFor:'constants'!
 
 backspace
@@ -648,7 +648,6 @@
       or:[ (asciivalue == 247 ) ]]]]]
 ! !
 
-
 !Character methodsFor:'accessing'!
 
 codePoint
@@ -1499,7 +1498,7 @@
     ^ s contents
 
     "
-     'ä' utf8Encoded 
+     'ä' utf8Encoded 
      'a' utf8Encoded 
     "
 ! !
@@ -1798,6 +1797,75 @@
     asciivalue <= 16rFF ifTrue:[^ String].
     asciivalue <= 16rFFFF ifTrue:[^ Unicode16String].
     ^ Unicode32String
+!
+
+unicodeBlock
+    "return the name of the unicode block in which this character is.
+     incomplete"
+
+    asciivalue <= 16r007F ifTrue:[^ #BASIC_LATIN ].
+    asciivalue <= 16r00FF ifTrue:[^ #LATIN1_SUPPLEMENT ].
+    asciivalue <= 16r017F ifTrue:[^ #LATIN1_EXTENDED_A].
+    asciivalue <= 16r024F ifTrue:[^ #LATIN1_EXTENDED_B].
+    asciivalue <= 16r02AF ifTrue:[^ #IPA_EXTENSIONS].
+    asciivalue <= 16r02FF ifTrue:[^ #SPACING_MODIFIER_LETTERS].
+    asciivalue <= 16r036f ifTrue:[ ^ #COMBINING_DIACRITICAL_MARKS ].
+    asciivalue <= 16r03FF ifTrue:[ ^ #GREEK_AND_COPTIC ].
+    asciivalue <= 16r04FF ifTrue:[ ^ #CYRILLIC ].
+    asciivalue <= 16r052F ifTrue:[ ^ #CYRILLIC_SUPPLEMENT ].
+    asciivalue <= 16r058F ifTrue:[ ^ #ARMENIAN ].
+    asciivalue <= 16r05FF ifTrue:[ ^ #HEBREW ].
+    asciivalue <= 16r06FF ifTrue:[ ^ #ARABIC ].
+    asciivalue <= 16r074F ifTrue:[ ^ #SYRIAC ].
+    asciivalue <= 16r077F ifTrue:[ ^ #ARABIC_SUPPLEMENT ].
+    asciivalue <= 16r07BF ifTrue:[ ^ #THAANA ].
+    asciivalue <= 16r07FF ifTrue:[ ^ #NKO ].
+    asciivalue <= 16r083F ifTrue:[ ^ #SAMARITAN ].
+    asciivalue <= 16r085F ifTrue:[ ^ #MANDAIC ].
+    asciivalue <= 16r087F ifTrue:[ ^ nil ].
+    asciivalue <= 16r08FF ifTrue:[ ^ #ARABIC_EXTENDED_A ].
+    asciivalue <= 16r097F ifTrue:[ ^ #DEVANAGARI ].
+    asciivalue <= 16r09FF ifTrue:[ ^ #BENGALI ].
+    asciivalue <= 16r0A7F ifTrue:[ ^ #GURMUKHI ].
+    asciivalue <= 16r0AFF ifTrue:[ ^ #GUJARATI ].
+    asciivalue <= 16r0B7F ifTrue:[ ^ #ORIYA ].
+    asciivalue <= 16r0BFF ifTrue:[ ^ #TAMIL ].
+    asciivalue <= 16r0C7F ifTrue:[ ^ #TELUGU ].
+    asciivalue <= 16r0CFF ifTrue:[ ^ #KANNADA ].
+    asciivalue <= 16r0D7F ifTrue:[ ^ #MALAYALAM ].
+    asciivalue <= 16r0DFF ifTrue:[ ^ #SINHALA ].
+    asciivalue <= 16r0E7F ifTrue:[ ^ #THAI ].
+    asciivalue <= 16r0EFF ifTrue:[ ^ #LAO ].
+    asciivalue <= 16r0FFF ifTrue:[ ^ #TIBETAN ].
+    asciivalue <= 16r109F ifTrue:[ ^ #MYANMAR ].
+    asciivalue <= 16r10FF ifTrue:[ ^ #GEORGIAN ].
+    asciivalue <= 16r11FF ifTrue:[ ^ #HANGUL_JAMO ].
+    asciivalue <= 16r137F ifTrue:[ ^ #ETHIOPIC ].
+    asciivalue <= 16r139F ifTrue:[ ^ #ETHIOPIC_SUPPLEMENT ].
+    asciivalue <= 16r13FF ifTrue:[ ^ #CHEROKEE ].
+    asciivalue <= 16r167F ifTrue:[ ^ #UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS ].
+    asciivalue < 16r1AB0 ifTrue:[ ^ #OTHER ].
+    asciivalue <= 16r1AFF ifTrue:[ ^ #COMBINING_DIACRITICAL_MARKS_EXTENDED ].
+    asciivalue < 16r1DC0 ifTrue:[ ^ #OTHER ].
+    asciivalue <= 16r1DFF ifTrue:[ ^ #COMBINING_DIACRITICAL_MARKS_SUPPLEMENT ].
+    asciivalue <= 16r1EFF ifTrue:[ ^ #LATIN_EXTENDED_ADDITIONAL ].
+    asciivalue <= 16r1FFF ifTrue:[ ^ #GREEK_EXTENDED ].
+    asciivalue <= 16r206F ifTrue:[ ^ #GENERAL_PUNKTUATION ].
+    asciivalue <= 16r209F ifTrue:[ ^ #SUPERSCRIPTS_AND_SUBSCRIPTS ].
+    asciivalue <= 16r20CF ifTrue:[ ^ #CURRENCY_SYMBOLS ].
+    asciivalue < 16r2190 ifTrue:[ ^ #OTHER ].
+    asciivalue <= 16r21FF ifTrue:[ ^ #ARROWS ].
+    asciivalue <= 16r22FF ifTrue:[ ^ #MATHEMATICAL_OPERATORS ].
+    asciivalue <= 16r23FF ifTrue:[ ^ #MISCELLANEOUS_TECHNICAL ].
+    asciivalue < 16r2600 ifTrue:[ ^ #OTHER ].
+    asciivalue <= 16r26FF ifTrue:[ ^ #MISCELLANEOUS_SYMBOLS ].
+    asciivalue <= 16r27BF ifTrue:[ ^ #DINGBATS ].
+    asciivalue <= 16r27EF ifTrue:[ ^ #MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A ].
+    ^ #OTHER
+
+    "
+     (Character value:16r200) unicodeBlock
+    "
 ! !
 
 !Character methodsFor:'testing'!
@@ -2569,9 +2637,9 @@
 
     "
      $e asNonDiacritical
-     $é asNonDiacritical
-     $ä asNonDiacritical
-     $å asNonDiacritical
+     $é asNonDiacritical
+     $ä asNonDiacritical
+     $Ã¥ asNonDiacritical
     "
 !
 
--- a/CharacterArray.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/CharacterArray.st	Thu Jun 30 21:12:35 2016 +0100
@@ -18,7 +18,8 @@
 UninterpretedBytes variableByteSubclass:#CharacterArray
 	instanceVariableNames:''
 	classVariableNames:'PreviousMatch DecoderTables EncoderTables DecodingFailedSignal
-		EncodingFailedSignal'
+		EncodingFailedSignal UnicodeNormalizationMap
+		UnicodeDenormalizationMap'
 	poolDictionaries:''
 	category:'Collections-Text'
 !
@@ -350,7 +351,6 @@
     "Created: 3.8.1997 / 18:16:40 / cg"
 ! !
 
-
 !CharacterArray class methodsFor:'cleanup'!
 
 lowSpaceCleanup
@@ -549,8 +549,68 @@
      CharacterArray decodeFromUTF8:#[ 16rC0 16r80 ]
      CharacterArray decodeFromUTF8:#[ 16rE0 16r80 16r80 ]
     "
+!
+
+setupNormalizationMaps
+    "returns a 2-stage map from ch2 -> ch1 -> mappedChar
+     for unicode normalization (i.e. for making combining chars regular ones)"
+     
+    |def|
+
+    UnicodeNormalizationMap := Dictionary new.
+    UnicodeDenormalizationMap := Dictionary new.
+
+    def := [:combiner :chars :mappedChars |
+               |d|
+
+               d := UnicodeNormalizationMap at:combiner ifAbsentPut:[Dictionary new].
+               chars with:mappedChars do:[:ch1 :mappedChar | 
+                    d at:ch1 put:mappedChar.
+                    UnicodeDenormalizationMap at:mappedChar put:(Unicode16String with:ch1 with:combiner).
+               ].
+           ].        
+    def value:(Character codePoint:16r0300) "grave"         value:'AEIOUaeiouWw' value:'ÀÈÌÒÙàèìòùẀáº'.
+    def value:(Character codePoint:16r0301) "acute"         value:'AEIOUYaeiouyÇçKkMmPpWw' value:'ÃÉÃÓÚÃáéíóúýḈḉḰḱḾḿṔṕẂẃ'.
+    def value:(Character codePoint:16r0302) "circumflex"    value:'AEIOUaeiouZz' value:'ÂÊÎÔÛâêîôûáºáº‘'.
+    def value:(Character codePoint:16r0303) "tilde"         value:'AONaon' value:'ÃÕÑãõñ'.
+    def value:(Character codePoint:16r0307) "dot over"      value:'BbDdFfHhMmNnPpRrSsTtWwXxYyṢṣ' value:'ḂḃḊḋḞḟḢḣṀá¹á¹„ṅṖṗṘṙṠṡṪṫẆẇẊẋẎáºá¹¨á¹©'.
+    def value:(Character codePoint:16r0308) "diaresis"      value:'AEIOUaeiouyHhWwXxt' value:'ÄËÃÖÜäëïöüÿḦḧẄẅẌáºáº—'.
+    def value:(Character codePoint:16r030A) "ring"          value:'Aawy' value:'Ååẘẙ'.
+    def value:(Character codePoint:16r0323) "dot under"     value:'AaBbDdEeIiHhKkLlMmNnOoRrSsTtUuVvWwZzṠṡ' value:'ẠạḄḅḌá¸áº¸áº¹á»Šá»‹á¸¤á¸¥á¸²á¸³á¸¶á¸·á¹‚ṃṆṇỌá»á¹šá¹›á¹¢á¹£á¹¬á¹­á»¤á»¥á¹¾á¹¿áºˆáº‰áº’ẓṨṩ'.
+    def value:(Character codePoint:16r0327) "cedilla"       value:'Cc' value:'Çç'.
+
+    "
+     self setupNormalizationMaps
+    "
+!
+
+unicodeDenormalizationMap
+    "returns a 2-stage map from ch2 -> ch1 -> mappedChar
+     for unicode normalization (i.e. for making combining chars regular ones)"
+     
+    UnicodeDenormalizationMap isNil ifTrue:[
+        self setupNormalizationMaps
+    ].
+    ^ UnicodeDenormalizationMap
+
+    "
+     self unicodeDenormalizationMap
+    "
+!
+
+unicodeNormalizationMap
+    "returns a 2-stage map from ch2 -> ch1 -> mappedChar
+     for unicode normalization (i.e. for making combining chars regular ones)"
+     
+    UnicodeNormalizationMap isNil ifTrue:[
+        self setupNormalizationMaps
+    ].
+    ^ UnicodeNormalizationMap
+
+    "
+     self unicodeNormalizationMap
+    "
 ! !
-
 !CharacterArray class methodsFor:'pattern matching'!
 
 matchEscapeCharacter
@@ -956,7 +1016,6 @@
     ^ Unicode32String
 ! !
 
-
 !CharacterArray methodsFor:'Compatibility-ANSI'!
 
 addLineDelimiters
@@ -4540,6 +4599,77 @@
 
 !CharacterArray methodsFor:'encoding & decoding'!
 
+asDenormalizedUnicodeString
+    "return a new string containing the same characters, as a denormalized Unicode string.
+     This replaces diacritical chars (umlauts, accented chars etc) by
+     a sequence with combination characters.
+     (i.e. a plain character followed by a combining diacritical in the 0x03xx range)"
+
+    |map outStream mapChar|
+
+    map := self class unicodeDenormalizationMap.
+    
+    self containsNon7BitAscii ifFalse:[^ self]. "/ I cannot contain any
+
+    mapChar := 
+        [:char |
+            |mappedChars|
+
+            (mappedChars := map at:char ifAbsent:nil) notNil ifTrue:[ 
+                mappedChars do:mapChar.
+            ] ifFalse:[
+                outStream nextPut:char.        
+            ].
+        ].
+        
+    outStream := WriteStream on:(Unicode16String new:self size).
+    self do:mapChar.        
+    ^ outStream contents asSingleByteStringIfPossible.
+
+    "
+     'Ö' asDenormalizedUnicodeString 
+     'aÖÄx' asDenormalizedUnicodeString 
+     'abc' asDenormalizedUnicodeString 
+     'ṩ'  asString asDenormalizedUnicodeString 
+    "
+!
+
+asNormalizedUnicodeString
+    "return a new string containing the same characters, as a normalized Unicode string.
+     This replaces combination characters by corresponding single characters.
+     (i.e. diaresis and other combining diacriticals in the 0x03xx range)"
+
+    |outStream prevChar map mapEntries mappedChar|
+
+    map := self class unicodeNormalizationMap.
+     
+    self bitsPerCharacter <= 8 ifTrue:[^ self]. "/ I cannot contain any overtypes
+    (self contains:[:ch | ch unicodeBlock == #'COMBINING_DIACRITICAL_MARKS']) ifFalse:[^ self]. "/ I do not contain any overtypes 
+
+    outStream := WriteStream on:(self species new:self size).
+    self do:[:char |
+        ((char unicodeBlock == #'COMBINING_DIACRITICAL_MARKS')
+          and:[ (mapEntries := map at:char ifAbsent:nil) notNil
+          and:[ (mappedChar := mapEntries at:prevChar ifAbsent:nil) notNil ]]) ifTrue:[ 
+            prevChar := mappedChar.
+        ] ifFalse:[
+            prevChar notNil ifTrue:[ outStream nextPut:prevChar].        
+            prevChar := char
+        ].
+    ].        
+    prevChar notNil ifTrue:[ outStream nextPut:prevChar].        
+    ^ outStream contents asSingleByteStringIfPossible.
+
+    "
+     self unicodeNormalizationMap
+     ('O' , (Character value:16r0308)) asNormalizedUnicodeString -> 'Ö'
+     ('O' , (Character value:16r0308) ,
+      'A' , (Character value:16r0308)) asNormalizedUnicodeString -> 'ÖÄ'
+     ('s' , (Character value:16r0323) , (Character value:16r0307)) asNormalizedUnicodeString -> 'ṩ'
+     ('s' , (Character value:16r0307) , (Character value:16r0323)) asNormalizedUnicodeString -> 'ṩ'
+    "
+!
+
 decodeAsLiteralArray
     "given a literalEncoding in the receiver,
      create & return the corresponding object.
@@ -4761,8 +4891,6 @@
 ! !
 
 
-
-
 !CharacterArray methodsFor:'matching - glob expressions'!
 
 compoundMatch:aString
@@ -6045,7 +6173,7 @@
 encoding
     "return the strings encoding, as a symbol.
      Here, by default, we assume unicode-encoding.
-     Notice, that iso8859-1 is a true subset of unicode,
+     Notice, that ISO-8859-1 is a true subset of unicode,
      and that singleByteStrings are therefore both unicode AND
      8859-1 encoded."
 
@@ -8053,7 +8181,6 @@
     ^ aVisitor visitString:self with:aParameter
 ! !
 
-
 !CharacterArray class methodsFor:'documentation'!
 
 version
--- a/CharacterEncoder.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/CharacterEncoder.st	Thu Jun 30 21:12:35 2016 +0100
@@ -94,18 +94,18 @@
 
     All the ISO 8859 codesets include ASCII as a proper codeset within them: 
 
-    ISO 8859-1: Latin 1 - Western European Languages. 
-    ISO 8859-2: Latin 2 - Eastern European Languages. 
-    ISO 8859-3: Latin 3 - Afrikaans, Catalan, Dutch, English, Esperanto, German, 
+    ISO-8859-1: Latin 1 - Western European Languages. 
+    ISO-8859-2: Latin 2 - Eastern European Languages. 
+    ISO-8859-3: Latin 3 - Afrikaans, Catalan, Dutch, English, Esperanto, German, 
                           Italian, Maltese, Spanish and Turkish. 
-    ISO 8859-4: Latin 4 - Danish, English, Estonian, Finnish, German, Greenlandic, Lappish and Latvian. 
-    ISO 8859-5: Latin/Cyrillic - Bulgarian, Byelorussian, English, Macedonian, Russian, Serbo-Croat and Ukranian. 
-    ISO 8859-6: Latin/Arabic - Arabic. 
-    ISO 8859-7: Latin/Greek - Greek. 
-    ISO 8859-8: Latin/Hebrew - Hebrew. 
-    ISO 8859-9: Latin 5 - Danish, Dutch, English, Finnish, French, German, Irish, Italian, 
+    ISO-8859-4: Latin 4 - Danish, English, Estonian, Finnish, German, Greenlandic, Lappish and Latvian. 
+    ISO-8859-5: Latin/Cyrillic - Bulgarian, Byelorussian, English, Macedonian, Russian, Serbo-Croat and Ukranian. 
+    ISO-8859-6: Latin/Arabic - Arabic. 
+    ISO-8859-7: Latin/Greek - Greek. 
+    ISO-8859-8: Latin/Hebrew - Hebrew. 
+    ISO-8859-9: Latin 5 - Danish, Dutch, English, Finnish, French, German, Irish, Italian, 
                           Norwegian, Portuguese, Spanish, Swedish and Turkish. 
-    ISO 8859-10: Latin 6 - Danish, English, Estonian, Finnish, German, Greenlandic, Icelandic, 
+    ISO-8859-10: Latin 6 - Danish, English, Estonian, Finnish, German, Greenlandic, Icelandic, 
                           Sami (Lappish), Latvian, Lithuanian, Norwegian, Faroese and Swedish.
     [author:]
         Claus Gittinger
@@ -1427,7 +1427,7 @@
 decodingError 
     "report an error that there is no unicode-codePoint for a given codePoint in this encoding.
      (which is unlikely) or that the encoding is undefined for that value
-     (for example, holes in the ISO8859-3 encoding)"
+     (for example, holes in the ISO-8859-3 encoding)"
 
     |badCodePoint sender|
 
--- a/CharacterEncoderError.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/CharacterEncoderError.st	Thu Jun 30 21:12:35 2016 +0100
@@ -40,7 +40,7 @@
 "
     raised if no encoding/decoding exists for some codePoint
     while converting 
-    (for example, when converting unicode to iso8859-x and vice versa).
+    (for example, when converting unicode to ISO-8859-x and vice versa).
 "
 ! !
 
@@ -69,6 +69,6 @@
 !CharacterEncoderError class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoderError.st,v 1.10 2014-12-30 12:39:44 cg Exp $'
+    ^ '$Header$'
 ! !
 
--- a/ExternalStream.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/ExternalStream.st	Thu Jun 30 21:12:35 2016 +0100
@@ -3067,7 +3067,7 @@
     }
 
     if (__INST(handleType) == @symbol(socketHandle)) {
-	fd = __FILEVal(fp);
+	fd = (int)((SOCKET)(__FILEVal(fp)));
     } else
 	if ((__INST(handleType) == nil)
 	 || (__INST(handleType) == @symbol(filePointer))
@@ -4690,7 +4690,7 @@
     }
 
     if (__INST(handleType) == @symbol(socketHandle)) {
-	SOCKET sock = __FILEVal(fp);
+	SOCKET sock = (SOCKET)(__FILEVal(fp));
 
 	if (@global(FileOpenTrace) == true) {
 	    fprintf(stderr, "close socket [ExternalStream] %"_lx_"\n", (INT)sock);
@@ -6305,7 +6305,7 @@
 		}
 		RETURN (self);
 	    }
-	    fprintf(stderr, "cnt=%d len=%d\n", cnt, len);
+	    fprintf(stderr, "cnt=%"_ld_" len=%"_ld_"\n", (INT)cnt, (INT)len);
 	    error = __mkSmallInteger(__threadErrno);
 	}
     }
--- a/Float.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/Float.st	Thu Jun 30 21:12:35 2016 +0100
@@ -496,7 +496,6 @@
     ^ Epsilon
 ! !
 
-
 !Float class methodsFor:'binary storage'!
 
 readBinaryIEEEDoubleFrom:aStream
@@ -2342,7 +2341,8 @@
     frac = frexp(__floatVal(self), &exp);
     RETURN (__MKFLOAT(frac));
 %}.
-
+    ^ super mantissa
+    
     "
      1.0 exponent
      1.0 mantissa
--- a/FolderForProjectsDefinition.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/FolderForProjectsDefinition.st	Thu Jun 30 21:12:35 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 2014 by eXept Software AG
               All Rights Reserved
@@ -11,6 +13,8 @@
 "
 "{ Package: 'stx:libbasic' }"
 
+"{ NameSpace: Smalltalk }"
+
 ProjectDefinition subclass:#FolderForProjectsDefinition
 	instanceVariableNames:''
 	classVariableNames:''
@@ -127,7 +131,7 @@
         $(TOP)\goodies\builder\reports\report-runner.bat -D . -r Builder::TestReport -p $(PACKAGE)
 
 clean::
-        del *.$(CSUFFIX)
+        -del *.$(CSUFFIX)
 
 %(ADDITIONAL_RULES_HG)'
 !
@@ -282,10 +286,10 @@
 !FolderForProjectsDefinition class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/FolderForProjectsDefinition.st,v 1.3 2014-12-19 14:24:05 cg Exp $'
+    ^ '$Header$'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/FolderForProjectsDefinition.st,v 1.3 2014-12-19 14:24:05 cg Exp $'
+    ^ '$Header$'
 ! !
 
--- a/HandleRegistry.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/HandleRegistry.st	Thu Jun 30 21:12:35 2016 +0100
@@ -11,6 +11,8 @@
 "
 "{ Package: 'stx:libbasic' }"
 
+"{ NameSpace: Smalltalk }"
+
 Registry subclass:#HandleRegistry
 	instanceVariableNames:''
 	classVariableNames:''
@@ -72,7 +74,7 @@
 !HandleRegistry class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/HandleRegistry.st,v 1.9 2002/03/04 19:15:09 stefan Exp $'
+    ^ '$Header$'
 !
 
 version_SVN
--- a/IdentityDictionary.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/IdentityDictionary.st	Thu Jun 30 21:12:35 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 1992 by Claus Gittinger
 	      All Rights Reserved
@@ -98,7 +100,7 @@
 
     [
         probe := keyArray basicAt:index.
-        probe == key ifTrue:[^ index].         "<<<< == is different from inherited"
+        probe == key ifTrue:[^ index].         "<--- == is different from inherited"
         probe isNil ifTrue:[^ aBlock value].
 
         index == length ifTrue:[
@@ -130,17 +132,15 @@
 
     [
         probe := keyArray basicAt:index.
-        key == probe ifTrue:[^ index].              "<<<< == is different from inherited"   
+        key == probe ifTrue:[^ index].              "<--- == is different from inherited"   
         probe isNil ifTrue:[
             delIndex == 0 ifTrue:[^ index].
             keyArray basicAt:delIndex put:nil.
             ^ delIndex
         ].
 
-        probe == DeletedEntry ifTrue:[
-            delIndex == 0 ifTrue:[
-                delIndex := index
-            ]
+        (delIndex == 0 and:[probe == DeletedEntry]) ifTrue:[
+            delIndex := index
         ].
 
         index == length ifTrue:[
@@ -153,7 +153,9 @@
                 keyArray basicAt:delIndex put:nil.
                 ^ delIndex
             ].
-            ^ self grow findKeyOrNil:key
+            self grow.
+            length := keyArray basicSize.
+            startIndex := index := self initialIndexForKey:key.
         ].
     ] loop.
 
--- a/ImmutableString.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/ImmutableString.st	Thu Jun 30 21:12:35 2016 +0100
@@ -129,6 +129,46 @@
 
 !ImmutableString methodsFor:'copying'!
 
+copy
+    "return a copy of the receiver"
+
+    ^ self copyFrom:1
+
+    "
+        'abcd' asImmutableString copy
+    "
+!
+
+deepCopy
+    "when copying, return a real (mutable) String"
+
+    (self class == ImmutableString) ifTrue:[
+        ^ self copyFrom:1
+    ].
+    ^ super deepCopy
+
+    "
+     'hello world' asImmutableString deepCopy
+    "
+!
+
+deepCopyUsing:aDictionary postCopySelector:postCopySelector
+    "return a deep copy of the receiver - reimplemented to be a bit faster"
+
+    "
+     could be an instance of a subclass which needs deepCopy
+     of its named instvars ...
+    "
+    (self class == ImmutableString) ifTrue:[
+        ^ self copyFrom:1
+    ].
+    ^ super deepCopyUsing:aDictionary postCopySelector:postCopySelector
+
+    "
+     'hello world' asImmutableString deepCopyUsing:nil postCopySelector:nil
+    "
+!
+
 postCopy
     "when copied, make me a real (mutable) String"
 
@@ -152,16 +192,29 @@
 shallowCopy
     "when copying, return a real (mutable) String"
 
-    |sz|
-
-    sz := self size.
-    ^ (String new:sz) replaceFrom:1 to:sz with:self startingAt:1
+    (self class == ImmutableString) ifTrue:[
+        ^ self copyFrom:1
+    ].
+    ^ super shallowCopy
 
     "
      'hello world' asImmutableString shallowCopy
     "
 
     "Created: / 3.8.1998 / 14:47:00 / cg"
+!
+
+simpleDeepCopy
+    "when copying, return a real (mutable) String"
+
+    (self class == ImmutableString) ifTrue:[
+        ^ self copyFrom:1
+    ].
+    ^ super simpleDeepCopy
+
+    "
+     'hello world' asImmutableString simpleDeepCopy
+    "
 ! !
 
 !ImmutableString methodsFor:'private'!
--- a/LibraryDefinition.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/LibraryDefinition.st	Thu Jun 30 21:12:35 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 2006-2013 by eXept Software AG
               All Rights Reserved
@@ -121,7 +123,7 @@
 bc_dot_mak_mappings
     |d resFileName|
 
-    resFileName := (self package copyFrom:(self package lastIndexOfAny:':/')+1),'.$(RES)'.
+    resFileName := self resourceFilename. "/ (self package copyFrom:(self package lastIndexOfAny:':/')+1),'.$(RES)'.
 
     d := super bc_dot_mak_mappings.
     ^ d
@@ -338,7 +340,7 @@
         $(TOP)\goodies\builder\reports\report-runner.bat -D . -r Builder::TestReport -p $(PACKAGE)
         
 clean::
-        del *.$(CSUFFIX)
+        -del *.$(CSUFFIX)
 
 
 # BEGINMAKEDEPEND --- do not remove this line; make depend needs it
--- a/LinkedList.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/LinkedList.st	Thu Jun 30 21:12:35 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 1989 by Claus Gittinger
 	      All Rights Reserved
@@ -164,7 +166,7 @@
     ^ self at:index ifAbsent:[ self subscriptBoundsError:index]
 !
 
-at:index ifAbsent:exceptionBlock
+at:index ifAbsent:exceptionValue
     "return the n'th value - use of this method should be avoided,
      since it is slow to walk through the list - think about using
      another collection if you need indexed access.
@@ -176,16 +178,9 @@
         This method is provided for protocol completeness,
         but please consider using another type of collection if you use it"
 
-    |theLink
-     runIndex "{Class: SmallInteger}"|
+    |theLink|
 
-    theLink := firstLink.
-    runIndex := 1.
-    [runIndex == index] whileFalse:[
-        theLink isNil ifTrue:[^ exceptionBlock value].
-        theLink := theLink nextLink.
-        runIndex := runIndex + 1.
-    ].
+    theLink := self linkAt:index ifAbsent:[^ exceptionValue value].
     ^ theLink value
 !
 
@@ -439,15 +434,13 @@
 !LinkedList methodsFor:'enumerating'!
 
 do:aBlock
-    "evaluate the argument, aBlock with 1 arg for every link element in the list"
+    "evaluate the argument, aBlock with 1 arg for every value element in the list"
 
     |thisNode|
 
-    self obsoleteFeatureWarning:'this will soon change to enumerate the link values instead of the link itself'.
-
     thisNode := firstLink.
     [thisNode notNil] whileTrue:[
-        aBlock value:thisNode "value".
+        aBlock value:thisNode value.
         thisNode := thisNode nextLink
     ]
 !
--- a/Make.proto	Thu Jun 30 21:11:02 2016 +0100
+++ b/Make.proto	Thu Jun 30 21:12:35 2016 +0100
@@ -186,7 +186,6 @@
 $(OUTDIR)ProjectDefinition.$(O) ProjectDefinition.$(C) ProjectDefinition.$(H): ProjectDefinition.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)ReadEvalPrintLoop.$(O) ReadEvalPrintLoop.$(C) ReadEvalPrintLoop.$(H): ReadEvalPrintLoop.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)RecursionLock.$(O) RecursionLock.$(C) RecursionLock.$(H): RecursionLock.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)Registry.$(O) Registry.$(C) Registry.$(H): Registry.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)Semaphore.$(O) Semaphore.$(C) Semaphore.$(H): Semaphore.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)SharedPool.$(O) SharedPool.$(C) SharedPool.$(H): SharedPool.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)Signal.$(O) Signal.$(C) Signal.$(H): Signal.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -205,7 +204,6 @@
 $(OUTDIR)Bag.$(O) Bag.$(C) Bag.$(H): Bag.st $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)BlockContext.$(O) BlockContext.$(C) BlockContext.$(H): BlockContext.st $(INCLUDE_TOP)/stx/libbasic/Context.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)BuiltinLookup.$(O) BuiltinLookup.$(C) BuiltinLookup.$(H): BuiltinLookup.st $(INCLUDE_TOP)/stx/libbasic/Lookup.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)CachingRegistry.$(O) CachingRegistry.$(C) CachingRegistry.$(H): CachingRegistry.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Registry.$(H) $(STCHDR)
 $(OUTDIR)Character.$(O) Character.$(C) Character.$(H): Character.st $(INCLUDE_TOP)/stx/libbasic/Magnitude.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)CharacterEncoderImplementations__ISO10646_1.$(O) CharacterEncoderImplementations__ISO10646_1.$(C) CharacterEncoderImplementations__ISO10646_1.$(H): CharacterEncoderImplementations__ISO10646_1.st $(INCLUDE_TOP)/stx/libbasic/CharacterEncoder.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)CharacterEncoderImplementations__SingleByteEncoder.$(O) CharacterEncoderImplementations__SingleByteEncoder.$(C) CharacterEncoderImplementations__SingleByteEncoder.$(H): CharacterEncoderImplementations__SingleByteEncoder.st $(INCLUDE_TOP)/stx/libbasic/CharacterEncoder.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -217,7 +215,6 @@
 $(OUTDIR)ExternalFunction.$(O) ExternalFunction.$(C) ExternalFunction.$(H): ExternalFunction.st $(INCLUDE_TOP)/stx/libbasic/ExecutableFunction.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)False.$(O) False.$(C) False.$(H): False.st $(INCLUDE_TOP)/stx/libbasic/Boolean.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)FolderForProjectsDefinition.$(O) FolderForProjectsDefinition.$(C) FolderForProjectsDefinition.$(H): FolderForProjectsDefinition.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(STCHDR)
-$(OUTDIR)HandleRegistry.$(O) HandleRegistry.$(C) HandleRegistry.$(H): HandleRegistry.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Registry.$(H) $(STCHDR)
 $(OUTDIR)HashStream.$(O) HashStream.$(C) HashStream.$(H): HashStream.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Stream.$(H) $(STCHDR)
 $(OUTDIR)InlineObjectPrototype.$(O) InlineObjectPrototype.$(C) InlineObjectPrototype.$(H): InlineObjectPrototype.st $(INCLUDE_TOP)/stx/libbasic/InlineObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)JavaPackage.$(O) JavaPackage.$(C) JavaPackage.$(H): JavaPackage.st $(INCLUDE_TOP)/stx/libbasic/NameSpace.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -455,6 +452,7 @@
 $(OUTDIR)PrimitiveFailure.$(O) PrimitiveFailure.$(C) PrimitiveFailure.$(H): PrimitiveFailure.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/ExecutionError.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(STCHDR)
 $(OUTDIR)RangeError.$(O) RangeError.$(C) RangeError.$(H): RangeError.st $(INCLUDE_TOP)/stx/libbasic/ArithmeticError.$(H) $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(STCHDR)
 $(OUTDIR)ReadError.$(O) ReadError.$(C) ReadError.$(H): ReadError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(INCLUDE_TOP)/stx/libbasic/StreamError.$(H) $(STCHDR)
+$(OUTDIR)Registry.$(O) Registry.$(C) Registry.$(H): Registry.st $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Dictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/IdentityDictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Set.$(H) $(INCLUDE_TOP)/stx/libbasic/WeakIdentityDictionary.$(H) $(STCHDR)
 $(OUTDIR)SignedByteArray.$(O) SignedByteArray.$(C) SignedByteArray.$(H): SignedByteArray.st $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/ByteArray.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)StreamIOError.$(O) StreamIOError.$(C) StreamIOError.$(H): StreamIOError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(INCLUDE_TOP)/stx/libbasic/StreamError.$(H) $(STCHDR)
 $(OUTDIR)StreamNotOpenError.$(O) StreamNotOpenError.$(C) StreamNotOpenError.$(H): StreamNotOpenError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(INCLUDE_TOP)/stx/libbasic/StreamError.$(H) $(STCHDR)
@@ -468,10 +466,12 @@
 $(OUTDIR)WrongProceedabilityError.$(O) WrongProceedabilityError.$(C) WrongProceedabilityError.$(H): WrongProceedabilityError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(INCLUDE_TOP)/stx/libbasic/SignalError.$(H) $(STCHDR)
 $(OUTDIR)AbstractClassInstantiationError.$(O) AbstractClassInstantiationError.$(C) AbstractClassInstantiationError.$(H): AbstractClassInstantiationError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/ExecutionError.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/MethodNotAppropriateError.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(STCHDR)
 $(OUTDIR)BadLiteralsError.$(O) BadLiteralsError.$(C) BadLiteralsError.$(H): BadLiteralsError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/ExecutionError.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/InvalidCodeError.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(STCHDR)
+$(OUTDIR)CachingRegistry.$(O) CachingRegistry.$(C) CachingRegistry.$(H): CachingRegistry.st $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Dictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/IdentityDictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Registry.$(H) $(INCLUDE_TOP)/stx/libbasic/Set.$(H) $(INCLUDE_TOP)/stx/libbasic/WeakIdentityDictionary.$(H) $(STCHDR)
 $(OUTDIR)DecodingError.$(O) DecodingError.$(C) DecodingError.$(H): DecodingError.st $(INCLUDE_TOP)/stx/libbasic/CharacterEncoderError.$(H) $(INCLUDE_TOP)/stx/libbasic/ConversionError.$(H) $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(STCHDR)
 $(OUTDIR)EncodingError.$(O) EncodingError.$(C) EncodingError.$(H): EncodingError.st $(INCLUDE_TOP)/stx/libbasic/CharacterEncoderError.$(H) $(INCLUDE_TOP)/stx/libbasic/ConversionError.$(H) $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(STCHDR)
 $(OUTDIR)FileDoesNotExistException.$(O) FileDoesNotExistException.$(C) FileDoesNotExistException.$(H): FileDoesNotExistException.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/OpenError.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(INCLUDE_TOP)/stx/libbasic/StreamError.$(H) $(STCHDR)
 $(OUTDIR)FileStream.$(O) FileStream.$(C) FileStream.$(H): FileStream.st $(INCLUDE_TOP)/stx/libbasic/ExternalStream.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/PeekableStream.$(H) $(INCLUDE_TOP)/stx/libbasic/PositionableStream.$(H) $(INCLUDE_TOP)/stx/libbasic/ReadWriteStream.$(H) $(INCLUDE_TOP)/stx/libbasic/Stream.$(H) $(INCLUDE_TOP)/stx/libbasic/WriteStream.$(H) $(STCHDR)
+$(OUTDIR)HandleRegistry.$(O) HandleRegistry.$(C) HandleRegistry.$(H): HandleRegistry.st $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Dictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/IdentityDictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Registry.$(H) $(INCLUDE_TOP)/stx/libbasic/Set.$(H) $(INCLUDE_TOP)/stx/libbasic/WeakIdentityDictionary.$(H) $(STCHDR)
 $(OUTDIR)ImmutableString.$(O) ImmutableString.$(C) ImmutableString.$(H): ImmutableString.st $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/CharacterArray.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/String.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)InvalidByteCodeError.$(O) InvalidByteCodeError.$(C) InvalidByteCodeError.$(H): InvalidByteCodeError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/ExecutionError.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/InvalidCodeError.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(STCHDR)
 $(OUTDIR)InvalidInstructionError.$(O) InvalidInstructionError.$(C) InvalidInstructionError.$(H): InvalidInstructionError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/ExecutionError.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/InvalidCodeError.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(STCHDR)
--- a/Make.spec	Thu Jun 30 21:11:02 2016 +0100
+++ b/Make.spec	Thu Jun 30 21:12:35 2016 +0100
@@ -96,7 +96,6 @@
 	ProjectDefinition \
 	ReadEvalPrintLoop \
 	RecursionLock \
-	Registry \
 	Semaphore \
 	SharedPool \
 	Signal \
@@ -115,7 +114,6 @@
 	Bag \
 	BlockContext \
 	BuiltinLookup \
-	CachingRegistry \
 	Character \
 	CharacterEncoderImplementations::ISO10646_1 \
 	CharacterEncoderImplementations::SingleByteEncoder \
@@ -127,7 +125,6 @@
 	ExternalFunction \
 	False \
 	FolderForProjectsDefinition \
-	HandleRegistry \
 	HashStream \
 	InlineObjectPrototype \
 	JavaPackage \
@@ -365,6 +362,7 @@
 	PrimitiveFailure \
 	RangeError \
 	ReadError \
+	Registry \
 	SignedByteArray \
 	StreamIOError \
 	StreamNotOpenError \
@@ -378,10 +376,12 @@
 	WrongProceedabilityError \
 	AbstractClassInstantiationError \
 	BadLiteralsError \
+	CachingRegistry \
 	DecodingError \
 	EncodingError \
 	FileDoesNotExistException \
 	FileStream \
+	HandleRegistry \
 	ImmutableString \
 	InvalidByteCodeError \
 	InvalidInstructionError \
@@ -474,7 +474,6 @@
     $(OUTDIR_SLASH)ProjectDefinition.$(O) \
     $(OUTDIR_SLASH)ReadEvalPrintLoop.$(O) \
     $(OUTDIR_SLASH)RecursionLock.$(O) \
-    $(OUTDIR_SLASH)Registry.$(O) \
     $(OUTDIR_SLASH)Semaphore.$(O) \
     $(OUTDIR_SLASH)SharedPool.$(O) \
     $(OUTDIR_SLASH)Signal.$(O) \
@@ -493,7 +492,6 @@
     $(OUTDIR_SLASH)Bag.$(O) \
     $(OUTDIR_SLASH)BlockContext.$(O) \
     $(OUTDIR_SLASH)BuiltinLookup.$(O) \
-    $(OUTDIR_SLASH)CachingRegistry.$(O) \
     $(OUTDIR_SLASH)Character.$(O) \
     $(OUTDIR_SLASH)CharacterEncoderImplementations__ISO10646_1.$(O) \
     $(OUTDIR_SLASH)CharacterEncoderImplementations__SingleByteEncoder.$(O) \
@@ -505,7 +503,6 @@
     $(OUTDIR_SLASH)ExternalFunction.$(O) \
     $(OUTDIR_SLASH)False.$(O) \
     $(OUTDIR_SLASH)FolderForProjectsDefinition.$(O) \
-    $(OUTDIR_SLASH)HandleRegistry.$(O) \
     $(OUTDIR_SLASH)HashStream.$(O) \
     $(OUTDIR_SLASH)InlineObjectPrototype.$(O) \
     $(OUTDIR_SLASH)JavaPackage.$(O) \
@@ -743,6 +740,7 @@
     $(OUTDIR_SLASH)PrimitiveFailure.$(O) \
     $(OUTDIR_SLASH)RangeError.$(O) \
     $(OUTDIR_SLASH)ReadError.$(O) \
+    $(OUTDIR_SLASH)Registry.$(O) \
     $(OUTDIR_SLASH)SignedByteArray.$(O) \
     $(OUTDIR_SLASH)StreamIOError.$(O) \
     $(OUTDIR_SLASH)StreamNotOpenError.$(O) \
@@ -756,10 +754,12 @@
     $(OUTDIR_SLASH)WrongProceedabilityError.$(O) \
     $(OUTDIR_SLASH)AbstractClassInstantiationError.$(O) \
     $(OUTDIR_SLASH)BadLiteralsError.$(O) \
+    $(OUTDIR_SLASH)CachingRegistry.$(O) \
     $(OUTDIR_SLASH)DecodingError.$(O) \
     $(OUTDIR_SLASH)EncodingError.$(O) \
     $(OUTDIR_SLASH)FileDoesNotExistException.$(O) \
     $(OUTDIR_SLASH)FileStream.$(O) \
+    $(OUTDIR_SLASH)HandleRegistry.$(O) \
     $(OUTDIR_SLASH)ImmutableString.$(O) \
     $(OUTDIR_SLASH)InvalidByteCodeError.$(O) \
     $(OUTDIR_SLASH)InvalidInstructionError.$(O) \
--- a/Method.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/Method.st	Thu Jun 30 21:12:35 2016 +0100
@@ -193,18 +193,17 @@
     "create signals"
 
     PrivateMethodSignal isNil ifTrue:[
-	"EXPERIMENTAL"
-	PrivateMethodSignal := ExecutionError newSignalMayProceed:true.
-	PrivateMethodSignal nameClass:self message:#privateMethodSignal.
-	PrivateMethodSignal notifierString:'attempt to execute private/protected method'.
+        "EXPERIMENTAL"
+        PrivateMethodSignal := ExecutionError newSignalMayProceed:true.
+        PrivateMethodSignal nameClass:self message:#privateMethodSignal.
+        PrivateMethodSignal notifierString:'attempt to execute private/protected method'.
     ].
 
     LastFileLock isNil ifTrue:[
-	LastFileLock := RecursionLock new name:'Method-LastFile'.
-	LastMethodSourcesLock := RecursionLock new name:'Method-LastMethodSources'.
-
-	LastFileReference := WeakArray new:1.
-	LastFileReference at:1 put:nil.
+        LastFileLock := RecursionLock new name:'Method-LastFile'.
+        LastMethodSourcesLock := RecursionLock new name:'Method-LastMethodSources'.
+
+        LastFileReference := WeakArray new:1.
     ].
 
     CompilationLock := RecursionLock new name:'MethodCompilation'.
@@ -332,8 +331,8 @@
 
 flushSourceStreamCache
     LastFileLock critical:[
-	LastSourceFileName := LastMethodSources := nil.
-	LastFileReference at:1 put:0.
+        LastSourceFileName := LastMethodSources := nil.
+        LastFileReference at:1 put:nil.
     ].
 
     "
@@ -686,21 +685,21 @@
 
 overwrittenMethod
     "Answers overridden method or nil."
-
-    Overrides isNil ifTrue:[^ nil].
-    ^ (Overrides includesKey: self)
-	ifTrue:[Overrides at: self]
+    
+    Overrides isNil ifTrue:[
+        ^ nil
+    ].
+    ^ Overrides at:self ifAbsent:nil.
 
     "Created: / 05-07-2012 / 10:49:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 overwrittenMethod: aMethod
-
     "Set overridden method to aMethod"
 
     Overrides isNil ifTrue:[Overrides := WeakIdentityDictionary new:10].
     aMethod notNil ifTrue:[aMethod makeLocalStringSource].
-    Overrides at: self put: aMethod
+    Overrides at:self put:aMethod
 
     "Created: / 05-07-2012 / 10:50:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -806,76 +805,78 @@
     sourcePosition isNil ifTrue:[^ source].
     source isNil ifTrue:[^ nil].
 
-    self class lastMethodSourcesLock critical:[
-	LastMethodSources notNil ifTrue:[
-	    chunk := LastMethodSources at:self ifAbsent:nil.
-	].
-    ].
-    chunk notNil ifTrue:[
-	^ chunk
+    LastMethodSources notNil ifTrue:[
+        self class lastMethodSourcesLock critical:[
+            LastMethodSources notNil ifTrue:[
+                chunk := LastMethodSources at:self ifAbsent:nil.
+            ].
+        ].
+        chunk notNil ifTrue:[
+            ^ chunk
+        ].
     ].
 
     LastFileLock
-	critical:[
-	    "have to protect sourceStream from being closed as a side effect
-	     of some other process fetching some the source from a different source file"
-
-	    sourceStream := self sourceStreamUsingCache:true.
-	    sourceStream notNil ifTrue:[
-		[
-		    chunk := self sourceChunkFromStream:sourceStream.
-		] on:DecodingError do:[:ex|
-		    "CharacterEncoder>>#guessEncoding is not fail safe - retry with plain unencoded data"
-
-		    ('DecodingError ignored when reading <1p> (<2p>)' expandMacrosWith:self whoString with:ex description) infoPrintCR.
-		    sourceStream := self rawSourceStreamUsingCache:true.
-		    ex restart.
-		].
-	    ].
-	]
-	timeoutMs:100
-	ifBlocking:[
-	    "take care if LastFileLock is not available - maybe we are
-	     called by a debugger while someone holds the lock.
-	     Use uncached source streams"
-	    sourceStream := self sourceStreamUsingCache:false.
-	    sourceStream notNil ifTrue:[
-		[
-		    chunk := self sourceChunkFromStream:sourceStream.
-		    sourceStream close.
-		] on:DecodingError do:[:ex|
-		    "CharacterEncoder>>#guessEncoding is not fail safe - retry with plain unencoded data"
-		    ('DecodingError ignored when reading <1p> (<2p>)' expandMacrosWith:self whoString with:ex description) infoPrintCR.
-		    sourceStream close.
-		    sourceStream := self rawSourceStreamUsingCache:false.
-		    ex restart.
-		].
-	    ].
-	].
+        critical:[
+            "have to protect sourceStream from being closed as a side effect
+             of some other process fetching some the source from a different source file"
+
+            sourceStream := self sourceStreamUsingCache:true.
+            sourceStream notNil ifTrue:[
+                [
+                    chunk := self sourceChunkFromStream:sourceStream.
+                ] on:DecodingError do:[:ex|
+                    "CharacterEncoder>>#guessEncoding is not fail safe - retry with plain unencoded data"
+
+                    Logger info:'DecodingError ignored when reading %1 (%2)' with:self whoString with:ex description.
+                    sourceStream := self rawSourceStreamUsingCache:true.
+                    ex restart.
+                ].
+            ].
+        ]
+        timeoutMs:100
+        ifBlocking:[
+            "take care if LastFileLock is not available - maybe we are
+             called by a debugger while someone holds the lock.
+             Use uncached source streams"
+            sourceStream := self sourceStreamUsingCache:false.
+            sourceStream notNil ifTrue:[
+                [
+                    chunk := self sourceChunkFromStream:sourceStream.
+                    sourceStream close.
+                ] on:DecodingError do:[:ex|
+                    "CharacterEncoder>>#guessEncoding is not fail safe - retry with plain unencoded data"
+                    Logger info:'DecodingError ignored when reading %1 (%2)' with:self whoString with:ex description.
+                    sourceStream close.
+                    sourceStream := self rawSourceStreamUsingCache:false.
+                    ex restart.
+                ].
+            ].
+        ].
 
     "Cache the source of recently used methods"
     chunk notNil ifTrue:[
-	"JV@2013-08-19: Don't consult UserPreferences if the system is initilizing. This may
-	 lead in funny side-effect as #initializeDefaultPreferences is called which tries to
-	 initialize some colors. But Color itsels is likely not yet initialized, so DNU is
-	 thrown.
-	 CG: also care for standalone non-GUI progs, which have no userPreferences class"
-	(Smalltalk isInitialized
-	and:[UserPreferences notNil
-	and:[UserPreferences current keepMethodSourceCode]]) ifTrue:[
-	    source := chunk.
-	    sourcePosition := nil.
-	    ^ source.
-	].
-
-	CacheDictionary notNil ifTrue:[
-	    self class lastMethodSourcesLock critical:[
-		LastMethodSources isNil ifTrue:[
-		    LastMethodSources := CacheDictionary new:50.
-		].
-		LastMethodSources at:self put:chunk.
-	    ]
-	].
+        "JV@2013-08-19: Don't consult UserPreferences if the system is initializing. This may
+         lead in funny side-effect as #initializeDefaultPreferences is called which tries to
+         initialize some colors. But Color itself is likely not yet initialized, so DNU is
+         thrown.
+         CG: also care for standalone non-GUI progs, which have no userPreferences class"
+        (Smalltalk isInitialized
+        and:[UserPreferences notNil
+        and:[UserPreferences current keepMethodSourceCode]]) ifTrue:[
+            source := chunk.
+            sourcePosition := nil.
+            ^ source.
+        ].
+
+        CacheDictionary notNil ifTrue:[
+            self class lastMethodSourcesLock critical:[
+                LastMethodSources isNil ifTrue:[
+                    LastMethodSources := CacheDictionary new:50.
+                ].
+                LastMethodSources at:self put:chunk.
+            ]
+        ].
     ].
 
     ^ chunk
@@ -1057,7 +1058,6 @@
     "Modified (format): / 18-11-2011 / 14:47:06 / cg"
 ! !
 
-
 !Method methodsFor:'accessing-visibility'!
 
 isIgnored
@@ -2168,30 +2168,31 @@
     sourcePosition isNil ifTrue:[^ source readStream].
 
     usingCacheBoolean ifTrue:[
-	(package notNil and:[package ~= PackageId noProjectID]) ifTrue:[
-	    "/ keep the last source file open, because open/close
-	    "/ operations maybe slow on NFS-mounted file systems.
-	    "/ Since the reference to the file is weak, it will be closed
-	    "/ automatically if the file is not referenced for a while.
-	    "/ Neat trick.
-
-	    LastFileLock critical:[
-		aStream := LastFileReference at:1.
-		(aStream isNil
-		  or:[aStream class == SmallInteger
-		  or:[aStream isOpen not]]) ifTrue:[
-		    aStream := nil.
-		    LastFileReference at:1 put:nil.
-		].
-		(aStream notNil and:[LastSourceFileName ~= (package,'/',source)]) ifTrue:[
-		    aStream := nil.
-		].
-	    ].
-
-	    aStream notNil ifTrue:[
-		^ aStream
-	    ].
-	].
+        (package notNil and:[package ~= PackageId noProjectID]) ifTrue:[
+            "/ keep the last source file open, because open/close
+            "/ operations maybe slow on NFS-mounted file systems.
+            "/ Since the reference to the file is weak, it will be closed
+            "/ automatically if the file is not referenced for a while.
+            "/ Neat trick.
+
+            LastFileLock critical:[
+                aStream := LastFileReference at:1.
+                (aStream isNil
+                  or:[aStream class == SmallInteger
+                  or:[aStream isOpen not]]) ifTrue:[
+                    aStream := nil.
+                    LastFileReference at:1 put:nil.
+                ].
+                (aStream notNil
+                 and:[LastSourceFileName ~= (package,'/',source)]) ifTrue:[
+                    aStream := nil.
+                ].
+            ].
+
+            aStream notNil ifTrue:[
+                ^ aStream
+            ].
+        ].
     ].
 
     "/ a negative sourcePosition indicates
@@ -2202,47 +2203,47 @@
     "/ and having a clue for which file is meant later.
 
     sourcePosition < 0 ifTrue:[
-	aStream := source asFilename readStreamOrNil.
-	aStream isNil ifTrue:[
-	    "/ search in some standard places
-	    fileName := Smalltalk getSourceFileName:source.
-	    fileName notNil ifTrue:[
-		aStream := fileName asFilename readStreamOrNil.
-	    ].
-	].
-	aStream notNil ifTrue:[
-	    usingCacheBoolean ifTrue:[
-		self cacheSourceStream:aStream.
-	    ].
-	    ^ aStream
-	].
+        aStream := source asFilename readStreamOrNil.
+        aStream isNil ifTrue:[
+            "/ search in some standard places
+            fileName := Smalltalk getSourceFileName:source.
+            fileName notNil ifTrue:[
+                aStream := fileName asFilename readStreamOrNil.
+            ].
+        ].
+        aStream notNil ifTrue:[
+            usingCacheBoolean ifTrue:[
+                self cacheSourceStream:aStream.
+            ].
+            ^ aStream
+        ].
     ].
 
     "/
     "/ if there is no SourceManager, look in local standard places first
     "/
     (mclass notNil and:[package == mclass package]) ifTrue:[
-	mgr := mclass sourceCodeManagerFromBinaryRevision
+        mgr := mclass sourceCodeManagerFromBinaryRevision
     ] ifFalse:[
-	"I'm an extension and we don't have binary revision info (!!)
-	 for extensions, try to guess here"
-	pkgDef := ProjectDefinition definitionClassForPackage: package.
-	pkgDef notNil ifTrue:[
-	    mgr := pkgDef sourceCodeManagerFromBinaryRevision
-	] ifFalse:[
-	    "OK, trust the configuration"
-	    mgr := AbstractSourceCodeManager managerForPackage: package
-	]
+        "I'm an extension and we don't have binary revision info (!!)
+         for extensions, try to guess here"
+        pkgDef := ProjectDefinition definitionClassForPackage: package.
+        pkgDef notNil ifTrue:[
+            mgr := pkgDef sourceCodeManagerFromBinaryRevision
+        ] ifFalse:[
+            "OK, trust the configuration"
+            mgr := AbstractSourceCodeManager managerForPackage: package
+        ]
     ].
 
     (Class tryLocalSourceFirst or:[mgr isNil]) ifTrue:[
-	aStream := self localSourceStream.
-	aStream notNil ifTrue:[
-	    usingCacheBoolean ifTrue:[
-		self cacheSourceStream:aStream.
-	    ].
-	    ^ aStream
-	].
+        aStream := self localSourceStream.
+        aStream notNil ifTrue:[
+            usingCacheBoolean ifTrue:[
+                self cacheSourceStream:aStream.
+            ].
+            ^ aStream
+        ].
     ].
 
     "/
@@ -2250,39 +2251,39 @@
     "/
     who := self who.
     who notNil ifTrue:[
-	myClass := who methodClass.
-
-	(package notNil and:[package ~= myClass package and:[package ~= #'__NoProject__']]) ifTrue:[
-	    "/ I am an extension
-	    mgr notNil ifTrue:[
-		"/ try to get the source using my package information ...
-		mod := package asPackageId module.
-		dir := package asPackageId directory.
-		aStream := mgr streamForExtensionFile:source package:package directory:dir module:mod cache:true.
-		aStream notNil ifTrue:[
-		    usingCacheBoolean ifTrue:[
-			self cacheSourceStream:aStream.
-		    ].
-		    ^ aStream
-		].
-	    ].
-	    "/ consult the local fileSystem
-	    aStream := self localSourceStream.
-	    aStream notNil ifTrue:[
-		usingCacheBoolean ifTrue:[
-		    self cacheSourceStream:aStream.
-		].
-		^ aStream
-	    ]
-	].
-
-	aStream := myClass sourceStreamFor:source.
-	aStream notNil ifTrue:[
-	    usingCacheBoolean ifTrue:[
-		self cacheSourceStream:aStream.
-	    ].
-	    ^ aStream
-	].
+        myClass := who methodClass.
+
+        (package notNil and:[package ~= myClass package and:[package ~= #'__NoProject__']]) ifTrue:[
+            "/ I am an extension
+            mgr notNil ifTrue:[
+                "/ try to get the source using my package information ...
+                mod := package asPackageId module.
+                dir := package asPackageId directory.
+                aStream := mgr streamForExtensionFile:source package:package directory:dir module:mod cache:true.
+                aStream notNil ifTrue:[
+                    usingCacheBoolean ifTrue:[
+                        self cacheSourceStream:aStream.
+                    ].
+                    ^ aStream
+                ].
+            ].
+            "/ consult the local fileSystem
+            aStream := self localSourceStream.
+            aStream notNil ifTrue:[
+                usingCacheBoolean ifTrue:[
+                    self cacheSourceStream:aStream.
+                ].
+                ^ aStream
+            ]
+        ].
+
+        aStream := myClass sourceStreamFor:source.
+        aStream notNil ifTrue:[
+            usingCacheBoolean ifTrue:[
+                self cacheSourceStream:aStream.
+            ].
+            ^ aStream
+        ].
     ].
 
     "/
@@ -2290,49 +2291,49 @@
     "/ (if there is a source-code manager - otherwise, we already did that)
     "/
     (mgr notNil and:[Class tryLocalSourceFirst not]) ifTrue:[
-	aStream := self localSourceStream.
-	aStream notNil ifTrue:[
-	    usingCacheBoolean ifTrue:[
-		self cacheSourceStream:aStream.
-	    ].
-	    ^ aStream
-	].
+        aStream := self localSourceStream.
+        aStream notNil ifTrue:[
+            usingCacheBoolean ifTrue:[
+                self cacheSourceStream:aStream.
+            ].
+            ^ aStream
+        ].
     ].
 
     "/
     "/ final chance: try current directory
     "/
     aStream isNil ifTrue:[
-	aStream := source asFilename readStreamOrNil.
-	aStream notNil ifTrue:[
-	    usingCacheBoolean ifTrue:[
-		self cacheSourceStream:aStream.
-	    ].
-	    ^ aStream
-	].
+        aStream := source asFilename readStreamOrNil.
+        aStream notNil ifTrue:[
+            usingCacheBoolean ifTrue:[
+                self cacheSourceStream:aStream.
+            ].
+            ^ aStream
+        ].
     ].
 
     (who isNil and:[source notNil]) ifTrue:[
-	"/
-	"/ mhmh - seems to be a method which used to be in some
-	"/ class, but has been overwritten by another or removed.
-	"/ (i.e. it has no containing class anyMore)
-	"/ try to guess the class from the sourceFileName.
-	"/ and retry.
-	"/
-	className := Smalltalk classNameForFile:source.
-	(classNameSymbol := className asSymbolIfInterned) notNil ifTrue:[
-	    myClass := Smalltalk at:classNameSymbol ifAbsent:nil.
-	    myClass notNil ifTrue:[
-		aStream := myClass sourceStreamFor:source.
-		aStream notNil ifTrue:[
-		    usingCacheBoolean ifTrue:[
-			self cacheSourceStream:aStream.
-		    ].
-		    ^ aStream
-		].
-	    ]
-	]
+        "/
+        "/ mhmh - seems to be a method which used to be in some
+        "/ class, but has been overwritten by another or removed.
+        "/ (i.e. it has no containing class anyMore)
+        "/ try to guess the class from the sourceFileName.
+        "/ and retry.
+        "/
+        className := Smalltalk classNameForFile:source.
+        (classNameSymbol := className asSymbolIfInterned) notNil ifTrue:[
+            myClass := Smalltalk at:classNameSymbol ifAbsent:nil.
+            myClass notNil ifTrue:[
+                aStream := myClass sourceStreamFor:source.
+                aStream notNil ifTrue:[
+                    usingCacheBoolean ifTrue:[
+                        self cacheSourceStream:aStream.
+                    ].
+                    ^ aStream
+                ].
+            ]
+        ]
     ].
 
     ^ nil
@@ -3050,14 +3051,16 @@
     "Modified: / 05-07-2012 / 10:52:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-overwrites: aMethod
-
-    | mth |
-    mth := self overwrittenMethod.
-    [ mth notNil ] whileTrue:
-	[mth == aMethod ifTrue:[^true].
-	mth := mth overwrittenMethod].
-    ^false
+overwrites:aMethod 
+    |mth|
+
+    mth := self.
+    [ mth := mth overwrittenMethod. mth notNil ] whileTrue:[
+        mth == aMethod ifTrue:[
+            ^ true
+        ].
+    ].
+    ^ false
 
     "Created: / 05-07-2012 / 10:52:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -3725,7 +3728,6 @@
     "Created: / 23-07-2012 / 11:16:36 / cg"
 ! !
 
-
 !Method methodsFor:'source management'!
 
 revisionInfo
--- a/Object.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/Object.st	Thu Jun 30 21:12:35 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 1988 by Claus Gittinger
               All Rights Reserved
@@ -14,21 +16,21 @@
 "{ NameSpace: Smalltalk }"
 
 nil subclass:#Object
-        instanceVariableNames:''
-        classVariableNames:'AbortAllSignal AbortSignal ActivityNotificationSignal
-                DebuggerHooks DeepCopyErrorSignal Dependencies
-                ElementOutOfBoundsSignal EnabledBreakPoints ErrorRecursion
-                ErrorSignal FinalizationLobby HaltSignal IndexNotFoundSignal
-                InfoPrinting InformationSignal InternalErrorSignal
-                KeyNotFoundSignal MessageNotUnderstoodSignal
-                NonIntegerIndexSignal NonWeakDependencies NotFoundSignal
-                OSSignalInterruptSignal ObjectAttributes
-                ObjectAttributesAccessLock PrimitiveFailureSignal
-                RecursionInterruptSignal RecursiveStoreStringSignal
-                SubscriptOutOfBoundsSignal SynchronizationSemaphores
-                UserInterruptSignal UserNotificationSignal WarningSignal'
-        poolDictionaries:''
-        category:'Kernel-Objects'
+	instanceVariableNames:''
+	classVariableNames:'AbortAllSignal AbortSignal ActivityNotificationSignal
+		DebuggerHooks DeepCopyErrorSignal Dependencies
+		ElementOutOfBoundsSignal EnabledBreakPoints ErrorRecursion
+		ErrorSignal FinalizationLobby HaltSignal IndexNotFoundSignal
+		InfoPrinting InformationSignal InternalErrorSignal
+		KeyNotFoundSignal MessageNotUnderstoodSignal
+		NonIntegerIndexSignal NonWeakDependencies NotFoundSignal
+		OSSignalInterruptSignal ObjectAttributes
+		ObjectAttributesAccessLock PrimitiveFailureSignal
+		RecursionInterruptSignal RecursiveStoreStringSignal
+		SubscriptOutOfBoundsSignal SynchronizationSemaphores
+		UserInterruptSignal UserNotificationSignal WarningSignal'
+	poolDictionaries:''
+	category:'Kernel-Objects'
 !
 
 !Object class methodsFor:'documentation'!
@@ -256,6 +258,7 @@
     "Modified: / 4.8.1999 / 08:54:06 / stefan"
 ! !
 
+
 !Object class methodsFor:'Compatibility-ST80'!
 
 rootError
@@ -494,6 +497,7 @@
     InfoPrinting := aBoolean
 ! !
 
+
 !Object class methodsFor:'queries'!
 
 isAbstract
@@ -516,6 +520,8 @@
 ! !
 
 
+
+
 !Object methodsFor:'Compatibility-Dolphin'!
 
 stbFixup: anSTBInFiler at: newObjectIndex
@@ -691,6 +697,8 @@
     "
 ! !
 
+
+
 !Object methodsFor:'accessing'!
 
 _at:index
@@ -2051,6 +2059,7 @@
     ^ aBlock ensure:[ self addDependent:someone ]
 ! !
 
+
 !Object methodsFor:'comparing'!
 
 = anObject
@@ -5492,10 +5501,10 @@
      This is typically sent by the VM, when a ctrl-C is typed at the
      controlling tty (i.e. in the xterm)."
 
-    UserInterruptSignal raiseRequest
-!
-
-userInterruptIn:aContext
+    UserInterrupt raiseRequest
+!
+
+userInterruptIn:aContext from:originator
     "{ Pragma: +optSpace }"
 
     "user (^c) interrupt - enter debugger, but show aContext
@@ -5503,11 +5512,13 @@
      This is used to hide any intermediate scheduler contexts,
      in case of an interrupted process. Typically, this is sent by
      the WindowGroup, when a keyboardEvent for the ctrl-C key is
-     processed."
+     processed.
+     Set the originator to distinguish UserInterrupts from controlling tty vs. 
+     UserInterrupt from a view."
 
     <context: #return>
 
-    UserInterruptSignal raiseRequestWith:nil errorString:nil in:aContext
+    UserInterrupt raiseRequestWith:originator errorString:nil in:aContext
 
     "Created: / 18.10.1996 / 20:46:04 / cg"
     "Modified: / 20.10.1996 / 13:06:38 / cg"
@@ -7990,6 +8001,7 @@
     ^ self
 ! !
 
+
 !Object methodsFor:'secure message sending'!
 
 ?:selector
@@ -8595,6 +8607,7 @@
     "
 ! !
 
+
 !Object methodsFor:'synchronized evaluation'!
 
 freeSynchronizationSemaphore
@@ -10359,6 +10372,8 @@
     ^ aVisitor visitObject:self with:aParameter
 ! !
 
+
+
 !Object class methodsFor:'documentation'!
 
 version
--- a/OrderedCollection.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/OrderedCollection.st	Thu Jun 30 21:12:35 2016 +0100
@@ -221,7 +221,7 @@
 !OrderedCollection class methodsFor:'initialization'!
 
 initialize
-    MinContentsArraySize := 3. "the minimum size of a non-empty contentsArray"
+    MinContentsArraySize := 4. "the minimum size of a non-empty contentsArray"
 ! !
 
 !OrderedCollection class methodsFor:'instance creation'!
@@ -229,9 +229,6 @@
 new
     "create a new, empty OrderedCollection"
 
-    MinContentsArraySize isNil ifTrue:[
-        self initialize.
-    ].
     ^ self basicNew initContents:0
 
     "
@@ -262,13 +259,7 @@
      See also newWithSize:, which might do what you really want.        
      "
 
-    |sz|
-
-    MinContentsArraySize isNil ifTrue:[
-        self initialize.
-    ].
-    sz := size.
-    ^ self basicNew initContents:sz
+    ^ self basicNew initContents:size
 
     "Modified: 19.3.1996 / 17:53:47 / cg"
 !
@@ -308,13 +299,10 @@
     "create a new, empty OrderedCollection, for which we already know
      that it is very likely to remain empty.
      Use this for collections which may sometimes get elements added, but usually not.
-     This creates an initial contents array of size 0 in contrast to the default new:0,
-     which preserves space for 3 elements."
+     This is now obsolete and the same as new:
+     as the algorithm is now clever enough to deal efficiently with this situation"
 
-    MinContentsArraySize isNil ifTrue:[
-        self initialize.
-    ].
-    ^ self basicNew initContents:0
+    ^ self new:0
 
     "
      self newLikelyToRemainEmpty size
@@ -1359,17 +1347,16 @@
     |newCollection|
 
     newCollection := self copyEmpty:(self size + aCollection size).
-    self do:[:element |
-        newCollection add:element
-    ].
-    aCollection do:[:element |
-        newCollection add:element
-    ].
     ^ newCollection
+        addAll:self;
+        addAll:aCollection;
+        yourself.
 
     "
      #(1 2 3) asOrderedCollection , #(4 5 6) asOrderedCollection
-     #(1 2 3) asSortedCollection , #(99 101 100) asSortedCollection
+     #(1 3 5) asSortedCollection , #(6 4 2) asSortedCollection
+     #(1 3 5) asSortedCollection , #(6 4 2) asOrderedCollection
+     #(1 3 5) asSortedCollection , (#(6 4 2) asSortedCollection:[:a :b| a > b])
     "
 
     "Modified (comment): / 01-04-2012 / 13:17:30 / cg"
@@ -1385,16 +1372,6 @@
     ^ self copyFrom:1 to:self size
 !
 
-copyEmpty
-    "return a copy of the receiver without any elements."
-
-    ^ self copyEmpty:0
-
-    "
-        self new copyEmpty
-    "
-!
-
 postCopy
     "have to copy the contentsArray too"
 
@@ -1722,7 +1699,7 @@
     "setup the receiver-collection to hold size entries"
 
     size == 0 ifTrue:[
-        contentsArray := #().   "save garbage"
+        contentsArray := #().   "save memory by using a shared instance"
     ] ifFalse:[
         contentsArray := Array basicNew:size.
     ].
--- a/PCFilename.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/PCFilename.st	Thu Jun 30 21:12:35 2016 +0100
@@ -13,7 +13,7 @@
 
 Filename subclass:#PCFilename
 	instanceVariableNames:''
-	classVariableNames:'StandardSuffixTable'
+	classVariableNames:'StandardSuffixTable NextTempFilenameIndex'
 	poolDictionaries:''
 	category:'OS-Windows'
 !
--- a/PipeStream.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/PipeStream.st	Thu Jun 30 21:12:35 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 1989 by Claus Gittinger
 	      All Rights Reserved
@@ -218,7 +220,7 @@
 	|p|
 
 	p := PipeStream bidirectionalFor:'cat -u'.
-	p nextPutAll:'Wer ist der Bürgermeister von Wesel'; cr.
+	p nextPutAll:'Wer ist der Bürgermeister von Wesel'; cr.
 	Transcript showCR:p nextLine.
 	p close
     "
@@ -486,14 +488,13 @@
 shutDown
     "close the Stream and terminate the command"
 
-    self unregisterForFinalization
-       "terminate first under windows".
+    self unregisterForFinalization.
 
     "terminate first under windows"
     OperatingSystem isMSDOSlike ifTrue:[
-	self terminatePipeCommand.
-	self closeFileDescriptor.
-	^ self.
+        self terminatePipeCommand.
+        self closeFileDescriptor.
+        ^ self.
     ].
 
     "terminate last under unix"
--- a/ProjectDefinition.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/ProjectDefinition.st	Thu Jun 30 21:12:35 2016 +0100
@@ -383,6 +383,27 @@
     "Created: / 25-11-2011 / 14:34:01 / cg"
 !
 
+fullPackageName
+    "all components with underlines"
+
+    ^ self fullPackageNameFor: self package
+
+    "
+     stx_libwidg2 packageName
+     stx_libwidg2 fullPackageName
+     stx_goodies_refactoryBrowser_browser packageName
+     stx_goodies_refactoryBrowser_browser fullPackageName
+    "
+!
+
+fullPackageNameFor: aProjectID
+    ^ (aProjectID copyReplaceAny:':/' with:$_)
+
+    "
+     stx_goodies_refactoryBrowser_lint fullPackageNameFor:#stx_goodies_refactoryBrowser_lint  
+    "
+!
+
 initialClassNameForDefinitionOf:aPackageId
     <resource: #obsolete>
 
@@ -3344,7 +3365,7 @@
     action notNil ifTrue:[
         ^ self perform:action
     ].
-    (filename = 'app.rc' or:[filename = 'lib.rc']) ifTrue:[
+    (filename = 'app.rc' or:[filename = 'lib.rc' or:[filename = self rcFilename]]) ifTrue:[
         ^ self generate_packageName_dot_rc
     ].
     (filename = 'loadAll') ifTrue:[
@@ -3771,9 +3792,15 @@
 !
 
 rcFilename
-    ^ self packageName,'.rc'.
+    ^ self fullPackageName,'WINrc.rc'.
 
     "Created: / 07-09-2006 / 17:07:00 / cg"
+!
+
+resourceFilename
+    ^ (self rcFilename asFilename withSuffix:'$(RES)') name
+
+    "Created: / 07-09-2006 / 17:12:53 / cg"
 ! !
 
 !ProjectDefinition class methodsFor:'file mappings'!
@@ -3864,7 +3891,7 @@
 
 builder_baseline_dot_rbspec_packages
     ^ String streamContents:[:s |
-        self allPreRequisitesWithMandatorySorted do: [:packageId |
+        self allPreRequisitesSorted do: [:packageId |
             s nextPutLine:('  package "%1"' bindWith:packageId).
         ] 
     ].
@@ -4773,12 +4800,25 @@
 subProjectMakeCallsUsing:callString
     ^ String streamContents:[:s |
         self effectiveSubProjects do:[:packageID |
+            |pkgLabel skipLabel joinLabel|
+            
+            pkgLabel := (packageID copyReplaceAll:$: with:$_) copyReplaceAll:$/ with:$_.
+            skipLabel := 'skip_',pkgLabel.
+            joinLabel := 'done_',pkgLabel.
+            s nextPutLine:'@if not exist ',(self msdosPathToPackage:packageID from:(self package)),' goto ',skipLabel.
             s nextPutLine:'@echo "***********************************"'.
             s nextPutLine:'@echo "Building ',(packageID copyReplaceAll:$: with:$/).
             s nextPutLine:'@echo "***********************************"'.
             s nextPutLine:'@pushd ', (self msdosPathToPackage:packageID from:(self package)).
             s nextPutAll:'@'; nextPutAll:callString; nextPutLine:' || exit /b "%errorlevel%"'.
             s nextPutLine:'@popd'.
+            s nextPutLine:'@goto ',joinLabel.
+            s nextPutLine:':',skipLabel.
+            s nextPutLine:'@echo "###################################"'.
+            s nextPutLine:'@echo "FOLDER MISSING: ',(packageID copyReplaceAll:$: with:$/).
+            s nextPutLine:'@echo "###################################"'.
+            s nextPutLine:'exit /b 1'.
+            s nextPutLine:':',joinLabel.
             s cr.
         ]
     ]
@@ -4811,6 +4851,7 @@
 ! !
 
 
+
 !ProjectDefinition class methodsFor:'file templates'!
 
 autopackage_default_dot_apspec
--- a/Rectangle.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/Rectangle.st	Thu Jun 30 21:12:35 2016 +0100
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
 "
  COPYRIGHT (c) 1989 by Claus Gittinger
 	      All Rights Reserved
@@ -1800,7 +1798,7 @@
      (Rectangle origin:10@10 corner:50@50) scaledBy:2   
     "
 
-    "its NOT destructive:"
+    "it is NOT destructive:"
     "
      |r1 r2|
 
--- a/Registry.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/Registry.st	Thu Jun 30 21:12:35 2016 +0100
@@ -1,6 +1,8 @@
+"{ Encoding: utf8 }"
+
 "
- COPYRIGHT (c) 1993 by Claus Gittinger
-	      All Rights Reserved
+ COPYRIGHT (c) 1993,2015 by Claus Gittinger
+              All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -13,19 +15,19 @@
 
 "{ NameSpace: Smalltalk }"
 
-Object subclass:#Registry
-	instanceVariableNames:'registeredObjects handleArray tally indexTable'
+WeakIdentityDictionary subclass:#Registry
+	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
-	category:'System-Support'
+	category:'Collections-Weak'
 !
 
 !Registry class methodsFor:'documentation'!
 
 copyright
 "
- COPYRIGHT (c) 1993 by Claus Gittinger
-	      All Rights Reserved
+ COPYRIGHT (c) 1993,2015 by Claus Gittinger
+              All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -64,11 +66,11 @@
     Example uses are found in Form, Color, ExternalStream and Font
 
     [author:]
-	Claus Gittinger
+        Claus Gittinger
 
     [see also:]
-	WeakArray WeakIdentityDictionary WeakIdentitySet
-	Font Form Color Cursor ExternalStream
+        WeakArray WeakIdentityDictionary
+        Font Form Color Cursor ExternalStream
 
 "
 ! !
@@ -79,86 +81,64 @@
     "return the collection of registered objects.
      Warning: this returns a weak collection."
 
-    ^ registeredObjects
-
-    "Modified: 16.1.1997 / 16:40:46 / cg"
+    ^ self keys.
 ! !
 
-!Registry methodsFor:'dispose handling'!
+!Registry methodsFor:'element disposal'!
+
+clearDeadSlots
+    |wasBlocked executors|
+
+    "
+     have to block here - dispose may be done at a low priority
+     from the background finalizer. If new items are added by a
+     higher prio process, the dictionary might get corrupted otherwise
+    "
+    wasBlocked := OperatingSystem blockInterrupts.
+    [
+        keyArray
+            forAllDeadIndicesDo:[:idx |
+                                    executors isNil ifTrue:[
+                                        executors := OrderedCollection new.
+                                    ].
+                                    executors add:(valueArray basicAt:idx).
+                                    valueArray basicAt:idx put:nil.
+                                    tally := tally - 1.
+                                ]
+            replacingCorpsesWith:DeletedEntry.
+    ] ensure:[
+        wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
+        executors notNil ifTrue:[
+            executors do:[:eachExecutor|
+                [
+                    self informDispose:eachExecutor.
+                ] on:Error do:[:ex|
+                    Logger error:'Error %1 during finalization of: %2' with:ex description with:eachExecutor.
+                    ex suspendedContext fullPrintAllLevels:10.
+                ].
+            ].
+        ].
+    ].
+!
 
 informDispose:someHandle
     "send a dispose message - this is sent to the executor,
      since the original is already gone"
 
     someHandle finalize
-
-    "Modified: 16.1.1997 / 17:23:46 / cg"
 !
 
 update:something with:aParameter from:changedObject
     "an instance has been destroyed - look which one it was"
 
-    |executor
-     index  "{ Class: SmallInteger }"
-     sz     "{ Class: SmallInteger }"
-     o myHandleArray wasBlocked|
-
     something == #ElementExpired ifTrue:[
-	wasBlocked := OperatingSystem blockInterrupts.
-	[
-	    myHandleArray := handleArray.
-	    sz := myHandleArray size.
-
-	    index := 1.
-	    [index <= sz] whileTrue:[
-		o := registeredObjects at:index.
-		o class == SmallInteger ifTrue:[
-		    executor := myHandleArray at:index.
-		    "remove the executor from the handle array before informing the executor.
-		     This is critical in case of errors while executing the executor.
-		     See ObjectMemory>>finalize"
-		    registeredObjects at:index put:nil.
-		    tally := tally - 1.
-		    executor notNil ifTrue:[
-			myHandleArray at:index put:nil.
-
-			"/
-			"/ allow interrupts for a while ...
-			"/
-			wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
-			self informDispose:executor.
-			OperatingSystem blockInterrupts.
-
-			"/
-			"/ any change in an interrupt or dispose handling ?
-			"/
-			handleArray ~~ myHandleArray ifTrue:[
-			    myHandleArray := handleArray.
-			    sz := myHandleArray size.
-			    "/ start again
-			    index := 0.
-			]
-		    ]
-		].
-		index := index + 1.
-	    ]
-	] ensure:[
-	    wasBlocked ifFalse:[
-		OperatingSystem unblockInterrupts
-	    ]
-	].
-
-	(sz > 50 and:[tally < (sz // 2)]) ifTrue:[
-	    "/ shrink
-	    self resize
-	]
-    ] ifFalse:[
-	something == #earlyRestart ifTrue:[
-	    handleArray notNil ifTrue:[
-		handleArray atAllPut:nil.
-	    ]
-	]
+        self clearDeadSlots. 
+        ^ self.
     ].
+    something == #earlyRestart ifTrue:[
+        self removeAll.
+    ].
+    super update:something with:aParameter from:changedObject.
 
     "Created: 15.6.1996 / 15:24:41 / cg"
     "Modified: 8.1.1997 / 14:05:02 / stefan"
@@ -168,10 +148,8 @@
 !Registry methodsFor:'enumerating'!
 
 detect:aBlock ifNone:exceptionValue
-    registeredObjects notNil ifTrue:[
-	registeredObjects validElementsDo:[:obj |
-	    (aBlock value:obj) ifTrue:[^ obj].
-	].
+    keyArray validElementsDo:[:obj |
+        (obj ~~ DeletedEntry and:[aBlock value:obj]) ifTrue:[^ obj].
     ].
     ^ exceptionValue value
 !
@@ -179,114 +157,76 @@
 do:aBlock
     "evaluate aBlock for each registered object"
 
-    registeredObjects notNil ifTrue:[
-	registeredObjects validElementsDo:aBlock
+    "#keysDo: would not work, since the keyArray instvar may change if
+     elements are unregistered while looping."
+
+    ^ keyArray validElementsDo:[:each|
+        each ~~ DeletedEntry ifTrue:[aBlock value:each].
     ]
 ! !
 
 !Registry methodsFor:'private'!
 
-repairTally
-    |sz          "{ Class: SmallInteger }"
-     cnt         "{ Class: SmallInteger }"
-     executor wasBlocked|
+findKeyOrNil:key
+    "Look for the key in the receiver.
+     If it is found, return the index,
+     otherwise the index of the first unused slot.
+     Grow the receiver, if key was not found, and no unused slots were present.
 
-    wasBlocked := OperatingSystem blockInterrupts.
+     Warning: an empty slot MUST be filled by the sender - it is only to be sent
+              by at:put: / add: - like methods.
 
-    indexTable := WeakIdentityDictionary new.
+     Redefined to not nil values of expired keys here."
 
-    sz := registeredObjects size.
-    cnt := 0.
+    |index  "{ Class:SmallInteger }"
+     length "{ Class:SmallInteger }"
+     startIndex probe
+     delIndex "{ Class:SmallInteger }"|
 
-    1 to:sz do:[:index |
-	((executor := registeredObjects at:index) notNil
-	and:[executor class ~~ SmallInteger]) ifTrue:[
-	    indexTable at:executor put:index.
-	    cnt := cnt + 1.
-	] ifFalse:[
-	    handleArray at:index put:nil.
-	    registeredObjects at:index put:nil.
-	]
+    (OperatingSystem blockInterrupts) ifFalse:[
+        "/
+        "/ may never be entered with interrupts enabled
+        "/
+        OperatingSystem unblockInterrupts.
+        self error:'unblocked call of findKeyOrNil'.
     ].
 
-    wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
-
-    "Created: 6.3.1997 / 22:31:09 / cg"
-!
+    delIndex := 0.
 
-resize
-    |sz          "{ Class: SmallInteger }"
-     dstIndex    "{ Class: SmallInteger }"
-     realNewSize "{ Class: SmallInteger }"
-     newObjects newHandles wasBlocked
-     executor|
-
-    sz := registeredObjects size.
-
-    (sz > 50 and:[tally < (sz // 2)]) ifTrue:[
-	"/ shrink
-
-	wasBlocked := OperatingSystem blockInterrupts.
+    length := keyArray basicSize.
+    startIndex := index := self initialIndexForKey:key.
 
-	sz := registeredObjects size.
-	realNewSize := tally * 3 // 2.
-	newObjects := WeakArray new:realNewSize.
-	newHandles := Array new:realNewSize.
-	indexTable := WeakIdentityDictionary new.
+    [
+        probe := keyArray basicAt:index.
+        key == probe ifTrue:[^ index].
+        probe isNil ifTrue:[
+            delIndex == 0 ifTrue:[^ index].
+            keyArray basicAt:delIndex put:nil.
+            ^ delIndex
+        ].
 
-	dstIndex := 1.
-	1 to:sz do:[:index |
-	    (executor := registeredObjects at:index) notNil ifTrue:[
-		dstIndex > realNewSize ifTrue:[
-		    'Registry [error]: size given is too small in resize' errorPrintCR.
-		    self repairTally.
-		    wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
-		    ^ self
-		].
-		newObjects at:dstIndex put:executor.
-		newHandles at:dstIndex put:(handleArray at:index).
-		indexTable at:executor put:dstIndex.
+        (delIndex == 0 and:[probe == DeletedEntry]) ifTrue:[
+            delIndex := index
+        ].
 
-		dstIndex := dstIndex + 1
-	    ]
-	].
-
-	registeredObjects removeDependent:self.
-	newObjects addDependent:self.
-	registeredObjects := newObjects.
-	handleArray := newHandles.
-
-	wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
-    ]
-
-    "Created: 16.1.1997 / 18:08:00 / cg"
-    "Modified: 6.3.1997 / 22:29:58 / cg"
-!
-
-unregister:anObject atIndex:index
-    "strictly private"
+        index == length ifTrue:[
+            index := 1
+        ] ifFalse:[
+            index := index + 1
+        ].
+        index == startIndex ifTrue:[
+            delIndex ~~ 0 ifTrue:[
+                keyArray basicAt:delIndex put:nil.
+                ^ delIndex
+            ].
+            self grow.
+            length := keyArray basicSize.
+            startIndex := index := self initialIndexForKey:key.
+        ].
+    ] loop.
 
-    handleArray at:index put:nil.
-    registeredObjects at:index put:nil.
-    (anObject notNil and:[anObject ~~ 0]) ifTrue:[
-	indexTable removeKey:anObject ifAbsent:[]
-    ].
-    tally := tally - 1.
-! !
-
-!Registry methodsFor:'queries'!
-
-isEmpty
-    ^ tally == 0
-!
-
-size
-    "answer the number of entries in the registry"
-
-    tally isNil ifTrue:[
-	^ 0.
-    ].
-    ^ tally
+    "Modified: 30.1.1997 / 15:04:34 / cg"
+    "Modified: 1.10.1997 / 11:25:32 / stefan"
 ! !
 
 !Registry methodsFor:'registering objects'!
@@ -299,7 +239,7 @@
 
     executor := anObject executor.
     executor notNil ifTrue:[
-	self register:anObject as:executor.
+        self register:anObject as:executor.
     ].
 !
 
@@ -307,154 +247,18 @@
     "register anObject, so that I later receive informDispose: with aHandle
      (some time in the future)"
 
-    |newColl newPhantoms
-     size  "{ Class: SmallInteger }"
-     index "{ Class: SmallInteger }"
-     p wasBlocked idx0|
-
-    wasBlocked := OperatingSystem blockInterrupts.
-
-    registeredObjects size == 0 "isNil" ifTrue:[
-	registeredObjects := WeakArray new:10.
-	registeredObjects addDependent:self.
-	handleArray := Array basicNew:10.
-	indexTable := WeakIdentityDictionary new.
-
-	registeredObjects at:1 put:anObject.
-	handleArray at:1 put:aHandle.
-	indexTable at:anObject put:1.
-
-	tally := 1.
-	ObjectMemory addDependent:self.
-	wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
-	^ self
-    ].
-
-    "/
-    "/ allow interrupts to be handled here
-    "/ (but continue with interrupts disabled)
-    "/
-    wasBlocked ifFalse:[
-	OperatingSystem unblockInterrupts.
-	OperatingSystem blockInterrupts.
-    ].
-
-    "/ index := registeredObjects identityIndexOf:anObject ifAbsent:0.
-    index := indexTable at:anObject ifAbsent:0.
-    index ~~ 0 ifTrue:[
-	"/ double check ...
-	(registeredObjects at:index) ~~ anObject ifTrue:[
-	    ('Registry [warning]: index table clobbered') errorPrintCR.
-	].
-
-	"already registered"
-
-	handleArray at:index put:aHandle.
-"/        ('Registry [info]: object (' , (registeredObjects at:index) printString , ') is already registered') infoPrintCR.
-	wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
-	^ self
-    ].
-
-    "/
-    "/ allow interrupts to be handled here
-    "/ (but continue with interrupts disabled)
-    "/
-    wasBlocked ifFalse:[
-	OperatingSystem unblockInterrupts.
-	OperatingSystem blockInterrupts.
+    aHandle isNil ifTrue:[
+        self unregister:anObject.
+        ^ self.
     ].
 
-    "/
-    "/ search for a free slot ...
-    "/ on the fly look for leftovers (should no longer happen)
-    "/
-    idx0 := 1.
-    index := registeredObjects identityIndexOf:nil startingAt:idx0.
-    [index ~~ 0] whileTrue:[
-	"is there a leftover ?"
-	p := handleArray at:index.
-	p isNil ifTrue:[
-	    registeredObjects at:index put:anObject.
-	    handleArray at:index put:aHandle.
-	    indexTable at:anObject put:index.
-
-	    tally := tally + 1.
-	    wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
-	    ^ self
-	].
-
-	"/ mhmh - a registeredObject vanished, but its
-	"/ executor is still there ...
-
-	"/
-	"/ this may happen, if the registries dispose handling is
-	"/ currently being executed by a lower priority process,
-	"/ and the registeredObject has already been nilled,
-	"/ but the executor is being notified (in the other process).
-
-"/        'Registry [info]: leftOver executor: ' infoPrint. p infoPrintCR.
-
-"/        "tell the executor"
-"/        handleArray at:index put:nil.
-"/        tally := tally - 1.
-"/        self informDispose:p.
-"/        p := nil.
-
-	idx0 := index + 1.
-	index := registeredObjects identityIndexOf:nil startingAt:idx0.
-    ].
-
-    "no free slot, add at the end"
-
-    size := registeredObjects size.
-    index := size + 1.
-    newColl := WeakArray new:(size * 2).
-    newColl replaceFrom:1 to:size with:registeredObjects.
-    registeredObjects removeDependent:self.
-    registeredObjects := newColl.
-    registeredObjects addDependent:self.
-    registeredObjects at:index put:anObject.
-
-    newPhantoms := Array basicNew:(size * 2).
-    newPhantoms replaceFrom:1 to:size with:handleArray.
-    handleArray := newPhantoms.
-    handleArray at:index put:aHandle.
-    indexTable at:anObject put:index.
-
-    tally := tally + 1.
-
-    wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
-
-    "Modified: / 7.1.1997 / 16:56:03 / stefan"
-    "Modified: / 22.4.1998 / 11:09:23 / cg"
+    self at:anObject put:aHandle.
 !
 
 registerChange:anObject
     "a registered object has changed, create a new executor"
 
-    |index wasBlocked executor|
-
-    executor := anObject executor.
-    executor isNil ifTrue:[
-	self unregister:anObject.
-	^ self.
-    ].
-
-    wasBlocked := OperatingSystem blockInterrupts.
-    registeredObjects isNil ifTrue:[
-	index := 0
-    ] ifFalse:[
-	"/ index := registeredObjects identityIndexOf:anObject ifAbsent:0.
-	index := indexTable at:anObject ifAbsent:0.
-    ].
-    index ~~ 0 ifTrue:[
-	handleArray at:index put:executor.
-    ] ifFalse:[
-	self register:anObject as:executor
-    ].
-    wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
-
-    "Modified: 6.3.1997 / 22:24:15 / cg"
+    self register:anObject as:anObject executor.
 !
 
 unregister:anObject
@@ -462,20 +266,7 @@
      should be sent, if we are no more interested in destruction of
      anObject (i.e. it no longer holds external resources)."
 
-    |index wasBlocked|
-
-    registeredObjects notNil ifTrue:[
-        wasBlocked := OperatingSystem blockInterrupts.
-        "/ index := registeredObjects identityIndexOf:anObject ifAbsent:0.
-        index := indexTable at:anObject ifAbsent:0.
-        index ~~ 0 ifTrue:[
-            self unregister:anObject atIndex:index.
-            self resize.
-        ].
-        wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
-    ]
-
-    "Modified: 16.1.1997 / 18:08:42 / cg"
+    self removeKey:anObject ifAbsent:[].
 !
 
 unregisterAllForWhich:aBlock
@@ -484,53 +275,36 @@
      should be sent, if we are no more interested in destruction of
      a group of objects (i.e. it no longer holds external resources)."
 
-    |n "{ Class: SmallInteger }"
-     obj wasBlocked any|
-
-    registeredObjects notNil ifTrue:[
-        any := false.
-        wasBlocked := OperatingSystem blockInterrupts.
-        n := registeredObjects size.
+    |wasBlocked any|
 
-        1 to:n do:[:index |
-            obj := registeredObjects at:index.
-            (obj notNil and:[obj class ~~ SmallInteger]) ifTrue:[
-                (aBlock value:obj) ifTrue:[
-                    self unregister:obj atIndex:index.
-                    any := true.
-                ]
-            ]
+    wasBlocked := OperatingSystem blockInterrupts.
+    keyArray validElementsDo:[:eachObject|
+        (eachObject ~~ DeletedEntry and:[aBlock value:eachObject]) ifTrue:[
+            self safeRemoveKey:eachObject.      
+            any := true.
         ].
-        any ifTrue:[ self resize ].
-        wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
-    ]
-
-    "Created: 16.1.1997 / 16:39:18 / cg"
-    "Modified: 16.1.1997 / 18:08:47 / cg"
+    ].
+    any ifTrue:[ self possiblyShrink ].
+    wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
 !
 
 unregisterAllForWhichHandle:aBlock
-    |n "{ Class: SmallInteger }"
-     obj handle wasBlocked any|
+    "remove registration of all handles, for which the argument block
+     evaluates to true.
+     should be sent, if we are no more interested in destruction of
+     a group of objects (i.e. it no longer holds external resources)."
 
-    registeredObjects notNil ifTrue:[
-        any := false.
-        wasBlocked := OperatingSystem blockInterrupts.
-        n := registeredObjects size.
+    |wasBlocked any|
 
-        1 to:n do:[:index |
-            obj := registeredObjects at:index.
-            handle := handleArray at:index.
-            handle notNil ifTrue:[
-                (aBlock value:handle) ifTrue:[
-                    self unregister:obj atIndex:index.
-                    any := true.
-                ]
-            ]
+    wasBlocked := OperatingSystem blockInterrupts.
+    self keysAndValuesDo:[:eachObject :eachHandle|
+        (eachObject class ~~ SmallInteger and:[aBlock value:eachHandle]) ifTrue:[
+            self safeRemoveKey:eachObject.      
+            any := true.
         ].
-        any ifTrue:[ self resize ].
-        wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
-    ]
+    ].
+    any ifTrue:[ self possiblyShrink ].
+    wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
 ! !
 
 !Registry class methodsFor:'documentation'!
--- a/SequenceableCollection.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/SequenceableCollection.st	Thu Jun 30 21:12:35 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 1989 by Claus Gittinger
 	      All Rights Reserved
@@ -639,7 +641,7 @@
      around in big chunks"
 
     n := self occurrencesOfAny:elementsToSkip.
-    n == 0 ifTrue:[^ self copy].
+    n == 0 ifTrue:[^ self copyFrom:1].
 
     sz := self size.
     copy := self copyEmptyAndGrow:(sz - n).
@@ -648,18 +650,18 @@
     dstIndex := 1.
 
     n timesRepeat:[
-	skipIndex := self indexOfAny:elementsToSkip startingAt:srcIndex.
-	l := skipIndex - srcIndex.
-	l ~~ 0 ifTrue:[
-	    copy replaceFrom:dstIndex to:(dstIndex + l - 1)
-			with:self startingAt:srcIndex.
-	    dstIndex := dstIndex + l
-	].
-	srcIndex := skipIndex + 1
+        skipIndex := self indexOfAny:elementsToSkip startingAt:srcIndex.
+        l := skipIndex - srcIndex.
+        l ~~ 0 ifTrue:[
+            copy replaceFrom:dstIndex to:(dstIndex + l - 1)
+                        with:self startingAt:srcIndex.
+            dstIndex := dstIndex + l
+        ].
+        srcIndex := skipIndex + 1
     ].
     l := sz - srcIndex.
     copy replaceFrom:dstIndex to:(dstIndex + l)
-		with:self startingAt:srcIndex.
+                with:self startingAt:srcIndex.
     ^ copy
 
     "
@@ -761,6 +763,7 @@
     ^ self replaceFrom:start to:stop with:anArray startingAt:repStart
 ! !
 
+
 !SequenceableCollection methodsFor:'accessing'!
 
 after:anObject
@@ -4041,7 +4044,7 @@
      have been replaced by newElement."
 
 "/    'Warning: #copyReplaceAll:with: will change semantics as defined in ANSI soon' errorPrintCR.
-    ^ self copy replaceAll:oldElement with:newElement
+    ^ (self copyFrom:1) replaceAll:oldElement with:newElement
 
     "
      #(1 2 1 2 1 2 1 2 1 2) copyReplaceAll:1 with:99
@@ -4107,7 +4110,7 @@
     "return a copy of the receiver, where all elements equal to any in collectionOfOldElements
      have been replaced by newElement."
 
-    ^ self copy replaceAny:collectionOfOldElements with:newElement
+    ^ (self copyFrom:1) replaceAny:collectionOfOldElements with:newElement
 
     "
      #(1 2 3 1 2 3 1 2 3 4 1 2 3 1 2 3) copyReplaceAny:#(1 2) with:99
@@ -4123,7 +4126,7 @@
     |newColl sz mySize replSize|
 
     mySize := self size.
-    startIndex > mySize ifTrue:[^ self copy].
+    startIndex > mySize ifTrue:[^ self copyFrom:1].
 
     replSize := aCollection size.
     sz := mySize - (endIndex - startIndex + 1) + replSize.
@@ -4153,7 +4156,7 @@
     |newColl mySize|
 
     mySize := self size.
-    startIndex > mySize ifTrue:[^ self copy].
+    startIndex > mySize ifTrue:[^ self copyFrom:1].
 
     newColl := self copyEmptyAndGrow:mySize.
     newColl replaceFrom:1 to:(startIndex - 1) with:self.
@@ -4185,7 +4188,7 @@
      have been replaced by newElement.
      ANSI version of what used to be #copyReplaceAll:with:"
 
-    ^ self copy replaceAll:oldElement with:newElement
+    ^ (self copyFrom:1) replaceAll:oldElement with:newElement
 
     "
      #(1 2 1 2 1 2 1 2 1 2) copyReplacing:1 withObject:99
@@ -4560,7 +4563,7 @@
     |idx|
 
     idx := self indexOf:element.
-    idx == 0 ifTrue:[^ self copy].    "question: is this ok?"
+    idx == 0 ifTrue:[^ self copyFrom:1].    "question: is this ok?"
     ^ self copyFrom:1 to:idx
 
     "
@@ -4582,7 +4585,7 @@
     |idx|
 
     idx := self indexOf:element.
-    idx == 0 ifTrue:[^ self copy].    "question: is this ok?"
+    idx == 0 ifTrue:[^ self copyFrom:1].    "question: is this ok?"
     idx == 1 ifTrue:[^ self copyEmpty].
     ^ self copyFrom:1 to:(idx-1)
 
@@ -4729,7 +4732,7 @@
      around in big chunks"
 
     n := self occurrencesOf:elementToSkip.
-    n == 0 ifTrue:[^ self copy].
+    n == 0 ifTrue:[^ self copyFrom:1].
 
     sz := self size.
     copy := self copyEmptyAndGrow:(sz - n).
@@ -4738,18 +4741,18 @@
     dstIndex := 1.
 
     n timesRepeat:[
-	skipIndex := self indexOf:elementToSkip startingAt:srcIndex.
-	l := skipIndex - srcIndex.
-	l ~~ 0 ifTrue:[
-	    copy replaceFrom:dstIndex to:(dstIndex + l - 1)
-			with:self startingAt:srcIndex.
-	    dstIndex := dstIndex + l
-	].
-	srcIndex := skipIndex + 1
+        skipIndex := self indexOf:elementToSkip startingAt:srcIndex.
+        l := skipIndex - srcIndex.
+        l ~~ 0 ifTrue:[
+            copy replaceFrom:dstIndex to:(dstIndex + l - 1)
+                        with:self startingAt:srcIndex.
+            dstIndex := dstIndex + l
+        ].
+        srcIndex := skipIndex + 1
     ].
     l := sz - srcIndex.
     copy replaceFrom:dstIndex to:(dstIndex + l)
-		with:self startingAt:srcIndex.
+                with:self startingAt:srcIndex.
     ^ copy
 
     "
@@ -4774,7 +4777,7 @@
     |copy skipIndex sz|
 
     skipIndex := self indexOf:elementToSkip startingAt:1.
-    (skipIndex == 0) ifTrue:[^ self copy].
+    (skipIndex == 0) ifTrue:[^ self copyFrom:1].
 
     sz := self size - 1.
     copy := self copyEmptyAndGrow:sz.
@@ -4807,7 +4810,7 @@
      around in big chunks"
 
     n := self count:[:el | el == elementToSkip].
-    n == 0 ifTrue:[^ self copy].
+    n == 0 ifTrue:[^ self copyFrom:1].
 
     sz := self size.
     copy := self copyEmptyAndGrow:(sz - n).
@@ -4816,18 +4819,18 @@
     dstIndex := 1.
 
     n timesRepeat:[
-	skipIndex := self identityIndexOf:elementToSkip startingAt:srcIndex.
-	l := skipIndex - srcIndex.
-	l ~~ 0 ifTrue:[
-	    copy replaceFrom:dstIndex to:(dstIndex + l - 1)
-			with:self startingAt:srcIndex.
-	    dstIndex := dstIndex + l
-	].
-	srcIndex := skipIndex + 1
+        skipIndex := self identityIndexOf:elementToSkip startingAt:srcIndex.
+        l := skipIndex - srcIndex.
+        l ~~ 0 ifTrue:[
+            copy replaceFrom:dstIndex to:(dstIndex + l - 1)
+                        with:self startingAt:srcIndex.
+            dstIndex := dstIndex + l
+        ].
+        srcIndex := skipIndex + 1
     ].
     l := sz - srcIndex.
     copy replaceFrom:dstIndex to:(dstIndex + l)
-		with:self startingAt:srcIndex.
+                with:self startingAt:srcIndex.
     ^ copy
 
     "
@@ -4980,7 +4983,7 @@
     |pos|
 
     pos := self indexOf:anElement.
-    pos == 0 ifTrue:[^ self copy].
+    pos == 0 ifTrue:[^ self copyFrom:1].
 
     ^ self copyFrom:1 to:(pos - 1)
 
@@ -5063,7 +5066,7 @@
     |pos|
 
     pos := self indexOfSubCollection:aSubCollection.
-    pos == 0 ifTrue:[^ self copy].
+    pos == 0 ifTrue:[^ self copyFrom:1].
 
     ^ self copyFrom:1 to:(pos - 1)
 
@@ -5087,7 +5090,7 @@
     |pos|
 
     pos := self indexOfAny:aCollectionOfObjects.
-    pos == 0 ifTrue:[^ self copy].
+    pos == 0 ifTrue:[^ self copyFrom:1].
 
     ^ self copyFrom:1 to:(pos - 1)
 
@@ -5107,7 +5110,7 @@
     |pos|
 
     pos := self findFirst:aBlock.
-    pos == 0 ifTrue:[^ self copy].
+    pos == 0 ifTrue:[^ self copyFrom:1].
 
     ^ self copyFrom:1 to:(pos - 1)
 
@@ -9295,11 +9298,12 @@
 reversed
     "return a copy with elements in reverse order"
 
-    ^ self copy reverse
-
-    "
-     #(4 5 6 7 7) reversed
+    ^ (self copyFrom:1) reverse
+
+    "
+     #(4 5 6 7 7) reversed    
      #(1 4 7 10 2 5) asOrderedCollection reversed
+     #foo reversed 
     "
 !
 
--- a/Set.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/Set.st	Thu Jun 30 21:12:35 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 1991 by Claus Gittinger
 	      All Rights Reserved
@@ -200,6 +202,7 @@
     "Created: / 24.10.1997 / 23:13:44 / cg"
 ! !
 
+
 !Set methodsFor:'Compatibility-ST80'!
 
 initialIndexFor:hashKey boundedBy:length
@@ -923,7 +926,9 @@
                 keyArray basicAt:delIndex put:nil.
                 ^ delIndex
             ].
-            ^ self grow findKeyOrNil:key
+            self grow.
+            length := keyArray basicSize.
+            startIndex := index := self initialIndexForKey:key.
         ].
     ] loop.
 
@@ -1238,6 +1243,7 @@
     ^ tally
 ! !
 
+
 !Set methodsFor:'searching'!
 
 findFirst:aBlock ifNone:exceptionValue
--- a/ShortFloat.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/ShortFloat.st	Thu Jun 30 21:12:35 2016 +0100
@@ -346,7 +346,6 @@
     ^ Epsilon
 ! !
 
-
 !ShortFloat class methodsFor:'binary storage'!
 
 readBinaryIEEESingleFrom:aStream
@@ -505,13 +504,6 @@
     ^ Pi
 !
 
-powersOfTwo
-    "/ sigh: cannot have PoersOfTwo as class nstvar (yet)
-    PowersOfTwo notNil ifTrue: [^PowersOfTwo].
-    PowersOfTwo := self newPowersOfTwo.
-    ^PowersOfTwo
-!
-
 unity
     "return the neutral element for multiplication (1.0) as ShortFloat"
 
@@ -1636,7 +1628,8 @@
     RETURN (__MKFLOAT(frac));
 #endif
 %}.
-
+    ^ super mantissa
+    
     "
      1.0 asShortFloat exponent
      1.0 asShortFloat mantissa
--- a/SmallInteger.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/SmallInteger.st	Thu Jun 30 21:12:35 2016 +0100
@@ -232,6 +232,8 @@
     unsigned INT productLow, productHi;
     int negative;
 
+    myValue = __intVal(self);
+
 #   define low16Bits(foo)  ((foo) & 0xFFFF)
 #   define hi16Bits(foo)   ((foo) >> 16)
 #   define low32Bits(foo)  ((foo) & 0xFFFFFFFFL)
@@ -253,7 +255,6 @@
 # endif
 
     if (__isSmallInteger(aNumber)) {
-	myValue = __intVal(self);
 	otherValue = __intVal(aNumber);
 
 # if defined(USE_LONGLONG_FOR_MUL)
@@ -398,18 +399,17 @@
 # endif
     } else if (__isFloatLike(aNumber)) {
 	OBJ newFloat;
-	double val = (double)__intVal(self) * __floatVal(aNumber);
+	double val = (double)myValue * __floatVal(aNumber);
 
 	__qMKFLOAT(newFloat, val);
 	RETURN ( newFloat );
     } else if (__isShortFloat(aNumber)) {
 	OBJ newFloat;
-	float val = (float)__intVal(self) * __shortFloatVal(aNumber);
+	float val = (float)myValue * __shortFloatVal(aNumber);
 
 	__qMKSFLOAT(newFloat, val);
 	RETURN ( newFloat );
     } else if (__isFractionLike(aNumber)) {
-	INT myValue = __intVal(self);
 	OBJ t = __FractionInstPtr(aNumber)->f_numerator;
 
 	if (myValue == 0) {
@@ -558,16 +558,16 @@
      * (see the message send at the bottom)
      */
 
-    INT me, t, val;
+    INT t, val;
     double dval;
+    INT myValue = __intVal(self);
 
     if (__isSmallInteger(aNumber)) {
 	val = __intVal(aNumber);
 	if (val != 0) {
-	    me = __intVal(self);
-	    t = me / val;
+	    t = myValue / val;
 # ifdef GOOD_OPTIMIZER
-	    if (me % val == 0) {
+	    if (myValue % val == 0) {
 # else
 	    /* this is stupid - all I want is to look for a remainder ...
 	       but most compilers are too stupid and generate an extra modulus
@@ -577,7 +577,7 @@
 	       Therefore I use a multiplication which is faster than a modulo
 	       on most machines. Hint to GNU people :-)
 	    */
-	    if ((t * val) == me) {
+	    if ((t * val) == myValue) {
 # endif
 		RETURN ( __mkSmallInteger(t) );
 	    }
@@ -587,7 +587,7 @@
 	    dval = __floatVal(aNumber);
 	    if (dval != 0.0) {
 		OBJ newFloat;
-		double val = (double)__intVal(self) / dval;
+		double val = (double)myValue / dval;
 
 		__qMKFLOAT(newFloat, val);
 		RETURN ( newFloat );
@@ -646,12 +646,12 @@
      * (see the message send at the bottom)
      */
 
-    INT dividend, divisor, rslt;
+    INT divisor, rslt;
+    INT dividend = __intVal(self);
 
     if (__isSmallInteger(aNumber)) {
 	divisor = __intVal(aNumber);
 	if (divisor != 0) {
-	    dividend = __intVal(self);
 	    rslt = dividend / divisor;
 	    /*
 	     * Optimized to speed up positive result
@@ -691,7 +691,6 @@
 		t = __FractionInstPtr(aNumber)->f_denominator;
 		if (__isSmallInteger(t)) {
 		    INT den = __intVal(t);
-		    INT dividend = __intVal(self);
 		    INT prod;
 #if 0 && defined(__GNUC__) // supported from GCC 5
 		    if (!__builtin_mul_overflow(myself, den, &prod)) {
--- a/Smalltalk.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/Smalltalk.st	Thu Jun 30 21:12:35 2016 +0100
@@ -236,6 +236,8 @@
         this is NOT called when an image is restarted; in this
         case the show starts in Smalltalk>>restart."
 
+    OrderedCollection initialize.
+    
     Compiler := ByteCodeCompiler.
     Compiler isNil ifTrue:[
         "
@@ -4054,7 +4056,10 @@
 	    [
 		Screen openDefaultDisplay:nil.
 	    ] on:Screen deviceOpenErrorSignal do:[:ex|
-		('%1 [error]: No display connection to: %2' bindWith:commandName with:ex parameter) errorPrintCR.
+                "do not use #errorPrintCR, it is no error, when an app supports display and no display.
+                 in case shell exec 'app --version' we do not want this error string as part of the output"
+                ('%1 [error]: No display connection to: %2' bindWith:commandName with:ex parameter) infoPrintCR.
+"/                ('%1 [error]: No display connection to: %2' bindWith:commandName with:ex parameter) errorPrintCR.
 		(commandName, ' [info]: Either set the DISPLAY environment variable,') infoPrintCR.
 		(commandName, ' [info]: or start smalltalk with a -display argument.') infoPrintCR.
 		HeadlessOperation == true ifFalse:[
--- a/SmalltalkLanguage.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/SmalltalkLanguage.st	Thu Jun 30 21:12:35 2016 +0100
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
 "{ Package: 'stx:libbasic' }"
 
 "{ NameSpace: Smalltalk }"
@@ -89,7 +87,7 @@
 !
 
 parserClass
-    "Answer a class suitable for parsing a source codein 'my' language"
+    "Answer a class suitable for parsing a source code in 'my' language"
 
     ^ Parser
 
--- a/SortedCollection.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/SortedCollection.st	Thu Jun 30 21:12:35 2016 +0100
@@ -389,10 +389,7 @@
     "add all elements of the argument, aCollection to the receiver.
      Returns the argument, aCollection (sigh)."
 
-    |addedCollection mySize numAdded|
-
-    numAdded := aCollection size.
-    mySize := self size.
+    |addedCollection|
 
     (aCollection isSortedCollection
      and:[aCollection sortBlock == sortBlock]) ifTrue:[
@@ -401,11 +398,11 @@
         addedCollection := Array withAll:aCollection.
         addedCollection stableSort:sortBlock.
 
-        mySize == 0 ifTrue:[
+        self size == 0 ifTrue:[
             "/ special case: I am empty - add them en-bloque.
             contentsArray := addedCollection.
             firstIndex := 1.
-            lastIndex := numAdded.
+            lastIndex := aCollection size.
             ^ aCollection
         ].
     ].
--- a/String.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/String.st	Thu Jun 30 21:12:35 2016 +0100
@@ -139,7 +139,7 @@
     A little warning though: not all smalltalk systems allow subclassing String,
     so your program may become unportable if you do so.
 
-    Strings have an implicit (assumed) encoding of iso8859-1.
+    Strings have an implicit (assumed) encoding of ISO-8859-1.
     For strings with other encodings, either keep the encoding separately,
     or use instances of encodedString.
 
@@ -517,7 +517,6 @@
 
 
 
-
 !String class methodsFor:'queries'!
 
 defaultPlatformClass
@@ -541,6 +540,7 @@
 
 
 
+
 !String methodsFor:'Compatibility-VW5.4'!
 
 asByteString
@@ -560,6 +560,7 @@
     "Modified: / 12-01-2011 / 12:33:58 / cg"
 ! !
 
+
 !String methodsFor:'accessing'!
 
 at:index
@@ -2787,89 +2788,85 @@
 %{
 #ifdef __SCHTEAM__
     if ( aString.isStringLike() && self.isStringLike() ) {
-	STString me = self.asSTString();
-	STString other = aString.asSTString();
-	int myLength = me.characters.length;
-	int otherLength = other.characters.length;
-
-	char[] newChars = new char[myLength + otherLength];
-	System.arraycopy(me.characters, 0, newChars, 0, myLength);
-	System.arraycopy(other.characters, 0, newChars, myLength, otherLength);
-	return context._RETURN( new STString( newChars ));
+        STString me = self.asSTString();
+        STString other = aString.asSTString();
+        int myLength = me.characters.length;
+        int otherLength = other.characters.length;
+
+        char[] newChars = new char[myLength + otherLength];
+        System.arraycopy(me.characters, 0, newChars, 0, myLength);
+        System.arraycopy(other.characters, 0, newChars, myLength, otherLength);
+        return context._RETURN( new STString( newChars ));
     }
 #else
-    int l1, l2, sz;
-    OBJ newString;
-
-    if (__isNonNilObject(aString)) {
-	/*
-	 * can do it here if both are Strings/Symbols:
-	 */
-	if (__qIsStringLike(self) && __qIsStringLike(aString)) {
-	    l1 = __stringSize(self);
-	    l2 = __stringSize(aString);
-
-	    sz = OHDR_SIZE + l1 + l2 + 1;
-	    __qNew(newString, sz);      /* OBJECT ALLOCATION */
-	    if (newString != nil) {
-		char *cp1, *cp2;
-		REGISTER unsigned char *dstp;
-
-		__InstPtr(newString)->o_class = String;
-		__qSTORE(newString, String);
-		dstp = __stringVal(newString);
-		cp1 = (char *) __stringVal(self);
-		cp2 = (char *) __stringVal(aString);
+    /*
+     * can do it here if both are Strings/Symbols:
+     */
+    if (__qIsStringLike(self) && __isStringLike(aString)) {
+        OBJ newString;
+        int l1 = __stringSize(self);
+        int l2 = __stringSize(aString);
+        int sz = OHDR_SIZE + l1 + l2 + 1;
+
+        __qNew(newString, sz);      /* OBJECT ALLOCATION */
+        if (newString != nil) {
+            char *cp1, *cp2;
+            REGISTER unsigned char *dstp;
+
+            __InstPtr(newString)->o_class = String;
+            __qSTORE(newString, String);
+            dstp = __stringVal(newString);
+            cp1 = (char *) __stringVal(self);
+            cp2 = (char *) __stringVal(aString);
 
 # ifdef bcopy4
-		/* knowing that allocation is 4-byte aligned and
-		 * size rounded up to next 4-byte, the first copy
-		 * can be done word-wise.
-		 * that speeds up size-10-string , size-10-string
-		 * by 10% on a P5/200.
-		 */
-		{
-		    int nw = l1 >> 2;
-
-		    if (l1 & 3) nw++;
-		    bcopy4(cp1, dstp, nw);
-		    dstp += l1;
-		}
+            /* knowing that allocation is 4-byte aligned and
+             * size rounded up to next 4-byte, the first copy
+             * can be done word-wise.
+             * that speeds up size-10-string , size-10-string
+             * by 10% on a P5/200.
+             */
+            {
+                int nw = l1 >> 2;
+
+                if (l1 & 3) nw++;
+                bcopy4(cp1, dstp, nw);
+                dstp += l1;
+            }
 # else
 #  ifdef FAST_MEMCPY
-		memcpy(dstp, cp1, l1);
-		dstp += l1;
+            memcpy(dstp, cp1, l1);
+            dstp += l1;
 #  else
-		while (l1 >= 4) {
-		    *(int *)dstp = *(int *)cp1;
-		    dstp += 4; cp1 += 4;
-		    l1 -= 4;
-		}
-		while (l1--) *dstp++ = *cp1++;
+            while (l1 >= 4) {
+                *(int *)dstp = *(int *)cp1;
+                dstp += 4; cp1 += 4;
+                l1 -= 4;
+            }
+            while (l1--) *dstp++ = *cp1++;
 #  endif
 # endif
 
 # ifdef bcopy4
-		if (((INT)dstp & 3) == 0) {
-		    int nw = l2 >> 2;
-
-		    if (l2 & 3) nw++;
-		    bcopy4(cp2, dstp, nw);
-		    *(dstp + l2) = '\0';
-		    RETURN ( newString );
-		}
+            if (((INT)dstp & 3) == 0) {
+                int nw = l2 >> 2;
+
+                if (l2 & 3) nw++;
+                bcopy4(cp2, dstp, nw);
+                *(dstp + l2) = '\0';
+                RETURN ( newString );
+            }
 # endif
 
 # ifdef FAST_MEMCPY
-		memcpy(dstp, cp2, l2+1);
-		dstp[l2] = '\0';
+            memcpy(dstp, cp2, l2+1);
+            dstp[l2] = '\0';
 # else
-		while (l2--) *dstp++ = *cp2++;
-		*dstp = '\0';
+            while (l2--) *dstp++ = *cp2++;
+            *dstp = '\0';
 # endif
-		RETURN ( newString );
-	    }
-	}
+            RETURN ( newString );
+        }
     }
 #endif /* not SCHTEAM */
 %}.
@@ -3007,42 +3004,38 @@
     REGISTER int count;
     int len, index1, sz;
     OBJ newString;
-    OBJ myClass;
-
-    myClass = __qClass(self);
 
 #ifndef NO_PRIM_STRING
-    if (__isSmallInteger(start)
-     && ((myClass==String) || (myClass==Symbol))) {
-	len = __stringSize(self);
-	index1 = __intVal(start);
-	if (index1 > 0) {
-	    if (index1 <= len) {
-		count = len - index1 + 1;
-		sz = OHDR_SIZE + count + 1;
-
-		__PROTECT_CONTEXT__
-		__qNew(newString, sz);  /* OBJECT ALLOCATION */
-		__UNPROTECT_CONTEXT__
-
-		if (newString != nil) {
-		    __InstPtr(newString)->o_class = String;
-		    __qSTORE(newString, String);
-		    dstp = __stringVal(newString);
+    if (__isSmallInteger(start) && __qIsStringLike(self)) {
+        len = __stringSize(self);
+        index1 = __intVal(start);
+        if (index1 > 0) {
+            if (index1 <= len) {
+                count = len - index1 + 1;
+                sz = OHDR_SIZE + count + 1;
+
+                __PROTECT_CONTEXT__
+                __qNew(newString, sz);  /* OBJECT ALLOCATION */
+                __UNPROTECT_CONTEXT__
+
+                if (newString != nil) {
+                    __InstPtr(newString)->o_class = String;
+                    __qSTORE(newString, String);
+                    dstp = __stringVal(newString);
 #ifdef FAST_MEMCPY
-		    memcpy(dstp, __stringVal(self) + index1 - 1, count);
-		    dstp[count] = '\0';
+                    memcpy(dstp, __stringVal(self) + index1 - 1, count);
+                    dstp[count] = '\0';
 #else
-		    srcp = __stringVal(self) + index1 - 1;
-		    while (count--) {
-			*dstp++ = *srcp++;
-		    }
-		    *dstp = '\0';
+                    srcp = __stringVal(self) + index1 - 1;
+                    while (count--) {
+                        *dstp++ = *srcp++;
+                    }
+                    *dstp = '\0';
 #endif
-		    RETURN ( newString );
-		}
-	    }
-	}
+                    RETURN ( newString );
+                }
+            }
+        }
     }
 #endif
 %}.
@@ -3050,6 +3043,10 @@
      will eventually lead to an out-of-bound signal raise"
 
     ^ super copyFrom:start
+
+    "
+        '12345' copyFrom:3
+    "
 !
 
 copyFrom:start to:stop
@@ -3065,69 +3062,65 @@
     REGISTER int count;
     int len, sz, index1, index2;
     OBJ newString;
-    OBJ myClass;
-
-    myClass = __qClass(self);
 
 #ifndef NO_PRIM_STRING
-    if (__bothSmallInteger(start, stop)
-     && ((myClass==String) || (myClass==Symbol))) {
-	len = __stringSize(self);
-	index1 = __intVal(start);
-	index2 = __intVal(stop);
-
-	if ((index1 <= index2) && (index1 > 0)) {
-	    if (index2 <= len) {
-		count = index2 - index1 + 1;
-		sz = OHDR_SIZE + count + 1;
-
-		__PROTECT_CONTEXT__
-		__qNew(newString, sz);  /* OBJECT ALLOCATION */
-		__UNPROTECT_CONTEXT__
-
-		if (newString != nil) {
-		    __InstPtr(newString)->o_class = String;
-		    __qSTORE(newString, String);
-		    dstp = __stringVal(newString);
-		    srcp = __stringVal(self) + index1 - 1;
+    if (__bothSmallInteger(start, stop) && __qIsStringLike(self)) {
+        len = __stringSize(self);
+        index1 = __intVal(start);
+        index2 = __intVal(stop);
+
+        if ((index1 <= index2) && (index1 > 0)) {
+            if (index2 <= len) {
+                count = index2 - index1 + 1;
+                sz = OHDR_SIZE + count + 1;
+
+                __PROTECT_CONTEXT__
+                __qNew(newString, sz);  /* OBJECT ALLOCATION */
+                __UNPROTECT_CONTEXT__
+
+                if (newString != nil) {
+                    __InstPtr(newString)->o_class = String;
+                    __qSTORE(newString, String);
+                    dstp = __stringVal(newString);
+                    srcp = __stringVal(self) + index1 - 1;
 #ifdef bcopy4
-		    {
-			int nw = count >> 2;
-
-			if (count & 3) {
-			    nw++;
-			}
-			bcopy4(srcp, dstp, nw);
-			dstp[count] = '\0';
-		    }
+                    {
+                        int nw = count >> 2;
+
+                        if (count & 3) {
+                            nw++;
+                        }
+                        bcopy4(srcp, dstp, nw);
+                        dstp[count] = '\0';
+                    }
 #else
 # ifdef FAST_MEMCPY
-		    memcpy(dstp, srcp, count);
-		    dstp[count] = '\0';
+                    memcpy(dstp, srcp, count);
+                    dstp[count] = '\0';
 # else
-		    while (count--) {
-			*dstp++ = *srcp++;
-		    }
-		    *dstp = '\0';
+                    while (count--) {
+                        *dstp++ = *srcp++;
+                    }
+                    *dstp = '\0';
 # endif
 #endif
-		    RETURN ( newString );
-		}
-	    }
-	}
-	/*
-	 * allow empty copy
-	 */
-	if (index1 > index2) {
-	    __PROTECT_CONTEXT__
-	    __qNew(newString, OHDR_SIZE+1);     /* OBJECT ALLOCATION */
-	    __UNPROTECT_CONTEXT__
-	    if (newString != nil) {
-		__InstPtr(newString)->o_class = String;
-		(__stringVal(newString))[0] = '\0';
-		RETURN ( newString );
-	    }
-	}
+                    RETURN ( newString );
+                }
+            }
+        }
+        /*
+         * allow empty copy
+         */
+        if (index1 > index2) {
+            __PROTECT_CONTEXT__
+            __qNew(newString, OHDR_SIZE+1);     /* OBJECT ALLOCATION */
+            __UNPROTECT_CONTEXT__
+            if (newString != nil) {
+                __InstPtr(newString)->o_class = String;
+                (__stringVal(newString))[0] = '\0';
+                RETURN ( newString );
+            }
+        }
     }
 #endif
 %}.
@@ -3135,6 +3128,10 @@
      will eventually lead to an out-of-bound signal raise"
 
     ^ super copyFrom:start to:stop
+
+    "
+        '12345678' copyFrom:3 to:7
+    "
 !
 
 copyWith:aCharacter
@@ -3150,58 +3147,54 @@
     int sz;
     REGISTER unsigned char *dstp;
     OBJ cls, newString;
-    OBJ myClass;
-
-    myClass = __qClass(self);
 
 #ifndef NO_PRIM_STRING
     if (__isCharacter(aCharacter)) {
-	unsigned int cVal = __intVal(__characterVal(aCharacter));
-
-	if ((cVal <= 0xFF)
-	 && ((myClass==String) || (myClass==Symbol))) {
-	    count = __stringSize(self);
-	    sz = OHDR_SIZE + count + 1 + 1;
-
-	    __PROTECT_CONTEXT__
-	    __qNew(newString, sz);  /* OBJECT ALLOCATION */
-	    __UNPROTECT_CONTEXT__
-
-	    if (newString) {
-		__InstPtr(newString)->o_class = String;
-		__qSTORE(newString, String);
-		dstp = __stringVal(newString);
+        unsigned int cVal = __intVal(__characterVal(aCharacter));
+
+        if ((cVal <= 0xFF) && __qIsStringLike(self)) {
+            count = __stringSize(self);
+            sz = OHDR_SIZE + count + 1 + 1;
+
+            __PROTECT_CONTEXT__
+            __qNew(newString, sz);  /* OBJECT ALLOCATION */
+            __UNPROTECT_CONTEXT__
+
+            if (newString) {
+                __InstPtr(newString)->o_class = String;
+                __qSTORE(newString, String);
+                dstp = __stringVal(newString);
 
 # ifdef bcopy4
-		{
-		    int nw = count >> 2;
-		    char *srcp = (char *)__stringVal(self);
-
-		    if (count & 3) {
-			nw++;
-		    }
-		    bcopy4(srcp, dstp, nw);
-		    dstp += count;
-		}
+                {
+                    int nw = count >> 2;
+                    char *srcp = (char *)__stringVal(self);
+
+                    if (count & 3) {
+                        nw++;
+                    }
+                    bcopy4(srcp, dstp, nw);
+                    dstp += count;
+                }
 # else
 #  ifdef FAST_MEMCPY
-		memcpy(dstp, __stringVal(self), count);
-		dstp += count;
+                memcpy(dstp, __stringVal(self), count);
+                dstp += count;
 #  else
-		{
-		    REGISTER unsigned char *srcp;
-
-		    srcp = __stringVal(self);
-		    while ((*dstp = *srcp++) != '\0')
-			dstp++;
-		}
+                {
+                    REGISTER unsigned char *srcp;
+
+                    srcp = __stringVal(self);
+                    while ((*dstp = *srcp++) != '\0')
+                        dstp++;
+                }
 #  endif
 # endif
-		*dstp++ = cVal;
-		*dstp = '\0';
-		RETURN (newString );
-	    }
-	}
+                *dstp++ = cVal;
+                *dstp = '\0';
+                RETURN (newString );
+            }
+        }
     }
 #endif
 %}.
--- a/UnixOperatingSystem.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/UnixOperatingSystem.st	Thu Jun 30 21:12:35 2016 +0100
@@ -9493,7 +9493,7 @@
                     ^ CodesetEncoder decodeString: encodedPathNameOrOutputLine
                 ].
             ] on:DecodingError do:[:ex|
-                "maybe there are old filenames in ISO8859-x,
+                "maybe there are old filenames in ISO-8859-x,
                  just keep them untranslated"
             ].
         ].
@@ -9611,7 +9611,7 @@
                     ^ CodesetEncoder encodeString: pathName.
                 ].
             ] on:EncodingError do:[:ex|
-                "maybe there are old filenames in ISO8859-x,
+                "maybe there are old filenames in ISO-8859-x,
                  just keep them untranslated"
             ].
         ].
--- a/WeakArray.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/WeakArray.st	Thu Jun 30 21:12:35 2016 +0100
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
 "
  COPYRIGHT (c) 1991 by Claus Gittinger
 	      All Rights Reserved
@@ -645,7 +643,7 @@
     RETURN (self);
 %}.
     ^ super do:[:each |
-        each ~~ nil ifTrue:[aBlock value:each]
+        each notNil ifTrue:[aBlock value:each]
       ]
 
     "Modified: / 23-07-2015 / 15:35:24 / cg"
@@ -668,7 +666,7 @@
 
 forAllDeadIndicesDo:aBlock replacingCorpsesWith:newValue
     "evaluate the argument, aBlock for all indices where elements have been
-     replaced by zero (due to a collected object), and replace the element
+     replaced by a SmallInteger (due to a collected object), and replace the element
      with newValue.
      In the current implementation, the block sees the newValue (i.e. it is
      changed before the block is called); this behavior is not guaranteed
@@ -677,10 +675,10 @@
      slots may change iff the garbage collector finds new garbage."
 
     self keysAndValuesDo:[:index :element |
-	element class == SmallInteger ifTrue:[
-	    self at:index put:newValue.
-	    aBlock value:index.
-	]
+        element class == SmallInteger ifTrue:[
+            self at:index put:newValue.
+            aBlock value:index.
+        ]
     ]
 
     "Modified: 25.1.1997 / 14:51:28 / cg"
@@ -706,57 +704,57 @@
     nIndex = __BYTES2OBJS__(__qSize(self) - OHDR_SIZE);
     if (__isBlockLike(aBlock)
      && (__BlockInstPtr(aBlock)->b_nargs == __mkSmallInteger(1))) {
-	{
-	    /*
-	     * the most common case: a static compiled block, with home on the stack ...
-	     */
-	    REGISTER OBJFUNC codeVal;
+        {
+            /*
+             * the most common case: a static compiled block, with home on the stack ...
+             */
+            REGISTER OBJFUNC codeVal;
 
-	    if (((codeVal = __BlockInstPtr(aBlock)->b_code) != (OBJFUNC)nil)
-	     && (! ((INT)(__BlockInstPtr(aBlock)->b_flags) & __MASKSMALLINT(F_DYNAMIC)))) {
+            if (((codeVal = __BlockInstPtr(aBlock)->b_code) != (OBJFUNC)nil)
+             && (! ((INT)(__BlockInstPtr(aBlock)->b_flags) & __MASKSMALLINT(F_DYNAMIC)))) {
 
 #ifdef NEW_BLOCK_CALL
 #               define BLOCK_ARG        aBlock
 #else
 #               define BLOCK_ARG        rHome
-		REGISTER OBJ rHome;
+                REGISTER OBJ rHome;
 
-		rHome = __BlockInstPtr(aBlock)->b_home;
-		if ((rHome == nil) || (__qSpace(rHome) >= STACKSPACE))
+                rHome = __BlockInstPtr(aBlock)->b_home;
+                if ((rHome == nil) || (__qSpace(rHome) >= STACKSPACE))
 #endif
-		{
-		    for (; index < nIndex; index++) {
-			element = __InstPtr(self)->i_instvars[index];
-			if (element) {
-			    if (InterruptPending != nil) {
-				__interruptL(@line);
-				element = __InstPtr(self)->i_instvars[index];
-			    }
+                {
+                    for (; index < nIndex; index++) {
+                        element = __InstPtr(self)->i_instvars[index];
+                        if (element) {
+                            if (InterruptPending != nil) {
+                                __interruptL(@line);
+                                element = __InstPtr(self)->i_instvars[index];
+                            }
 
-			    if (__isNonNilObject(element)) {
-				element = __WEAK_READ__(self, element);
+                            if (__isNonNilObject(element)) {
+                                element = __WEAK_READ__(self, element);
 #ifdef WEAK_DEBUG
-				if (! __ISVALIDOBJECT(element)) {
-				    fprintf(stderr, "****** OOPS - invalid Weak-Read\n");
-				    __dumpObject__(element, __LINE__);
-				    element = nil;
-				}
+                                if (! __ISVALIDOBJECT(element)) {
+                                    fprintf(stderr, "****** OOPS - invalid Weak-Read\n");
+                                    __dumpObject__(element, __LINE__);
+                                    element = nil;
+                                }
 #endif
-			    }
-			    if (element) {
-				(*codeVal)(BLOCK_ARG, element);
-			    }
-			}
-		    }
-		    RETURN (self);
-		}
-	    }
-	}
+                            }
+                            if (element) {
+                                (*codeVal)(BLOCK_ARG, element);
+                            }
+                        }
+                    }
+                    RETURN (self);
+                }
+            }
+        }
 
-	/*
-	 * sorry, must check code-pointer in the loop
-	 * it could be recompiled or flushed
-	 */
+        /*
+         * sorry, must check code-pointer in the loop
+         * it could be recompiled or flushed
+         */
 #       undef BLOCK_ARG
 #ifdef NEW_BLOCK_CALL
 #       define BLOCK_ARG        aBlock
@@ -766,50 +764,50 @@
 #       define IBLOCK_ARG       (__BlockInstPtr(aBlock)->b_home)
 #endif
 
-	for (; index < nIndex; index++) {
-	    REGISTER OBJFUNC codeVal;
+        for (; index < nIndex; index++) {
+            REGISTER OBJFUNC codeVal;
 
-	    element = __InstPtr(self)->i_instvars[index];
-	    if (element) {
-		if (InterruptPending != nil) {
-		    __interruptL(@line);
-		    element = __InstPtr(self)->i_instvars[index];
-		}
-		if (__isNonNilObject(element)) {
-		    element = __WEAK_READ__(self, element);
+            element = __InstPtr(self)->i_instvars[index];
+            if (element) {
+                if (InterruptPending != nil) {
+                    __interruptL(@line);
+                    element = __InstPtr(self)->i_instvars[index];
+                }
+                if (__isNonNilObject(element)) {
+                    element = __WEAK_READ__(self, element);
 #ifdef WEAK_DEBUG
-		    if (! __ISVALIDOBJECT(element)) {
-			fprintf(stderr, "****** OOPS - invalid Weak-Read\n");
-			__dumpObject__(element, __LINE__);
-			element = nil;
-		    }
+                    if (! __ISVALIDOBJECT(element)) {
+                        fprintf(stderr, "****** OOPS - invalid Weak-Read\n");
+                        __dumpObject__(element, __LINE__);
+                        element = nil;
+                    }
 #endif
-		}
-		if (element) {
-		    if ((codeVal = __BlockInstPtr(aBlock)->b_code) != (OBJFUNC)nil) {
-			(*codeVal)(BLOCK_ARG, element);
-		    } else {
-			if (__BlockInstPtr(aBlock)->b_bytecodes != nil) {
-			    /*
-			     * arg is a compiled block with bytecode -
-			     * directly call interpreter without going through Block>>value
-			     */
+                }
+                if (element) {
+                    if ((codeVal = __BlockInstPtr(aBlock)->b_code) != (OBJFUNC)nil) {
+                        (*codeVal)(BLOCK_ARG, element);
+                    } else {
+                        if (__BlockInstPtr(aBlock)->b_bytecodes != nil) {
+                            /*
+                             * arg is a compiled block with bytecode -
+                             * directly call interpreter without going through Block>>value
+                             */
 #ifdef PASS_ARG_POINTER
-			    __interpret(aBlock, 1, nil, IBLOCK_ARG, nil, nil, &element);
+                            __interpret(aBlock, 1, nil, IBLOCK_ARG, nil, nil, &element);
 #else
-			    __interpret(aBlock, 1, nil, IBLOCK_ARG, nil, nil, element);
+                            __interpret(aBlock, 1, nil, IBLOCK_ARG, nil, nil, element);
 #endif
-			} else {
-			    /*
-			     * arg is something else - call it with #value
-			     */
-			    (*val.ilc_func)(aBlock, @symbol(value:), nil, &val, element);
-			}
-		    }
-		}
-	    }
-	}
-	RETURN (self);
+                        } else {
+                            /*
+                             * arg is something else - call it with #value
+                             */
+                            (*val.ilc_func)(aBlock, @symbol(value:), nil, &val, element);
+                        }
+                    }
+                }
+            }
+        }
+        RETURN (self);
 
 #       undef BLOCK_ARG
 #       undef IBLOCK_ARG
@@ -819,34 +817,34 @@
      * not a block - send it #value:
      */
     for (; index < nIndex; index++) {
-	element = __InstPtr(self)->i_instvars[index];
-	if (element) {
-	    if (InterruptPending != nil) {
-		__interruptL(@line);
-		element = __InstPtr(self)->i_instvars[index];
-	    }
-	    if (__isNonNilObject(element)) {
-		element = __WEAK_READ__(self, element);
+        element = __InstPtr(self)->i_instvars[index];
+        if (element) {
+            if (InterruptPending != nil) {
+                __interruptL(@line);
+                element = __InstPtr(self)->i_instvars[index];
+            }
+            if (__isNonNilObject(element)) {
+                element = __WEAK_READ__(self, element);
 #ifdef WEAK_DEBUG
-		if (! __ISVALIDOBJECT(element)) {
-		    fprintf(stderr, "****** OOPS - invalid Weak-Read\n");
-		    __dumpObject__(element, __LINE__);
-		    element = nil;
-		}
+                if (! __ISVALIDOBJECT(element)) {
+                    fprintf(stderr, "****** OOPS - invalid Weak-Read\n");
+                    __dumpObject__(element, __LINE__);
+                    element = nil;
+                }
 #endif
-	    }
-	    if (element) {
-		(*val.ilc_func)(aBlock,
-				    @symbol(value:),
-				    nil, &val,
-				    element);
-	    }
-	}
+            }
+            if (element) {
+                (*val.ilc_func)(aBlock,
+                                    @symbol(value:),
+                                    nil, &val,
+                                    element);
+            }
+        }
     }
     RETURN (self);
 %}.
     ^ super do:[:each |
-	each ~~ nil ifTrue:[aBlock value:each]
+        each notNil ifTrue:[aBlock value:each]
       ]
 !
 
@@ -1003,7 +1001,7 @@
     RETURN (self);
 %}.
     ^ super do:[:each |
-        (each ~~ nil and:[each class ~~ SmallInteger]) ifTrue:[aBlock value:each]
+        (each notNil and:[each class ~~ SmallInteger]) ifTrue:[aBlock value:each]
       ]
 
     "Modified: / 23-07-2015 / 15:32:44 / cg"
--- a/WeakDependencyDictionary.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/WeakDependencyDictionary.st	Thu Jun 30 21:12:35 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 1997 by Claus Gittinger
 	      All Rights Reserved
@@ -11,6 +13,8 @@
 "
 "{ Package: 'stx:libbasic' }"
 
+"{ NameSpace: Smalltalk }"
+
 WeakIdentityDictionary subclass:#WeakDependencyDictionary
 	instanceVariableNames:''
 	classVariableNames:''
@@ -53,7 +57,7 @@
 
 keyContainerOfSize:n
     "return a container for keys of size n.
-     use WeakArrays here."
+     use WeakArrays here, but don't make me a dependent of it."
 
     ^ WeakArray new:n.
 
@@ -165,3 +169,4 @@
 version
     ^ '$Header$'
 ! !
+
--- a/WeakIdentityDictionary.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/WeakIdentityDictionary.st	Thu Jun 30 21:12:35 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 1992 by Claus Gittinger
 	      All Rights Reserved
@@ -231,7 +233,7 @@
      Grow the receiver, if key was not found, and no unused slots were present.
 
      Warning: an empty slot MUST be filled by the sender - it is only to be sent
-	      by at:put: / add: - like methods."
+              by at:put: / add: - like methods."
 
     |index  "{ Class:SmallInteger }"
      length "{ Class:SmallInteger }"
@@ -239,11 +241,11 @@
      delIndex "{ Class:SmallInteger }"|
 
     (OperatingSystem blockInterrupts) ifFalse:[
-	"/
-	"/ may never be entered with interrupts enabled
-	"/
-	OperatingSystem unblockInterrupts.
-	self error:'unblocked call of findKeyOrNil'.
+        "/
+        "/ may never be entered with interrupts enabled
+        "/
+        OperatingSystem unblockInterrupts.
+        self error:'unblocked call of findKeyOrNil'.
     ].
 
     delIndex := 0.
@@ -252,39 +254,39 @@
     startIndex := index := self initialIndexForKey:key.
 
     [
-	probe := keyArray basicAt:index.
-	key == probe ifTrue:[^ index].
-	probe isNil ifTrue:[
-	    delIndex == 0 ifTrue:[^ index].
-	    keyArray basicAt:delIndex put:nil.
-	    ^ delIndex
-	].
+        probe := keyArray basicAt:index.
+        key == probe ifTrue:[^ index].
+        probe isNil ifTrue:[
+            delIndex == 0 ifTrue:[^ index].
+            keyArray basicAt:delIndex put:nil.
+            ^ delIndex
+        ].
 
-	probe class == SmallInteger ifTrue:[
-	    probe := DeletedEntry.
-	    keyArray basicAt:index put:probe.
-	    valueArray basicAt:index put:nil.
-	    tally := tally - 1.
-	].
+        probe class == SmallInteger ifTrue:[
+            probe := DeletedEntry.
+            keyArray basicAt:index put:probe.
+            valueArray basicAt:index put:nil.
+            tally := tally - 1.
+        ].
 
-	delIndex == 0 ifTrue:[
-	    probe == DeletedEntry ifTrue:[
-		delIndex := index
-	    ]
-	].
+        (delIndex == 0 and:[probe == DeletedEntry]) ifTrue:[
+            delIndex := index
+        ].
 
-	index == length ifTrue:[
-	    index := 1
-	] ifFalse:[
-	    index := index + 1
-	].
-	index == startIndex ifTrue:[
-	    delIndex ~~ 0 ifTrue:[
-		keyArray basicAt:delIndex put:nil.
-		^ delIndex
-	    ].
-	    ^ self grow findKeyOrNil:key
-	].
+        index == length ifTrue:[
+            index := 1
+        ] ifFalse:[
+            index := index + 1
+        ].
+        index == startIndex ifTrue:[
+            delIndex ~~ 0 ifTrue:[
+                keyArray basicAt:delIndex put:nil.
+                ^ delIndex
+            ].
+            self grow.
+            length := keyArray basicSize.
+            startIndex := index := self initialIndexForKey:key.
+        ].
     ] loop.
 
     "Modified: 30.1.1997 / 15:04:34 / cg"
@@ -338,7 +340,7 @@
 
 keyContainerOfSize:n
     "return a container for keys of size n.
-     use WeakArrays here, but dont make me a depenent of it."
+     use WeakArrays here."
 
     |w|
 
--- a/abbrev.stc	Thu Jun 30 21:11:02 2016 +0100
+++ b/abbrev.stc	Thu Jun 30 21:12:35 2016 +0100
@@ -46,7 +46,6 @@
 ProjectDefinition ProjectDefinition stx:libbasic 'System-Support-Projects' 3
 ReadEvalPrintLoop ReadEvalPrintLoop stx:libbasic 'System-Support' 0
 RecursionLock RecursionLock stx:libbasic 'Kernel-Processes' 0
-Registry Registry stx:libbasic 'System-Support' 0
 Semaphore Semaphore stx:libbasic 'Kernel-Processes' 0
 SharedPool SharedPool stx:libbasic 'Kernel-Classes' 0
 Signal Signal stx:libbasic 'Kernel-Exceptions' 0
@@ -65,7 +64,6 @@
 Bag Bag stx:libbasic 'Collections-Unordered' 0
 BlockContext BlockContext stx:libbasic 'Kernel-Methods' 0
 BuiltinLookup BuiltinLookup stx:libbasic 'Kernel-Extensions' 0
-CachingRegistry CachingRegistry stx:libbasic 'System-Support' 0
 Character Character stx:libbasic 'Magnitude-General' 0
 CharacterEncoderImplementations::ISO10646_1 CharacterEncoderImplementations__ISO10646_1 stx:libbasic 'Collections-Text-Encodings' 0
 CharacterEncoderImplementations::SingleByteEncoder CharacterEncoderImplementations__SingleByteEncoder stx:libbasic 'Collections-Text-Encodings' 0
@@ -77,7 +75,6 @@
 ExternalFunction ExternalFunction stx:libbasic 'System-Support' 0
 False False stx:libbasic 'Kernel-Objects' 0
 FolderForProjectsDefinition FolderForProjectsDefinition stx:libbasic 'System-Support-Projects' 3
-HandleRegistry HandleRegistry stx:libbasic 'System-Support' 0
 HashStream HashStream stx:libbasic 'System-Crypt-Hashing' 0
 InlineObjectPrototype InlineObjectPrototype stx:libbasic 'Programming-Support' 0
 JavaPackage JavaPackage stx:libbasic 'Languages-Java-Support' 0
@@ -319,6 +316,7 @@
 PrimitiveFailure PrimitiveFailure stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 1
 RangeError RangeError stx:libbasic 'Kernel-Exceptions-Errors' 1
 ReadError ReadError stx:libbasic 'Kernel-Exceptions-Errors' 1
+Registry Registry stx:libbasic 'Collections-Weak' 0
 SignedByteArray SignedByteArray stx:libbasic 'Collections-Arrayed' 0
 StreamIOError StreamIOError stx:libbasic 'Kernel-Exceptions-Errors' 1
 StreamNotOpenError StreamNotOpenError stx:libbasic 'Kernel-Exceptions-Errors' 1
@@ -332,10 +330,12 @@
 WrongProceedabilityError WrongProceedabilityError stx:libbasic 'Kernel-Exceptions-Errors' 1
 AbstractClassInstantiationError AbstractClassInstantiationError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 1
 BadLiteralsError BadLiteralsError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 1
+CachingRegistry CachingRegistry stx:libbasic 'System-Support' 0
 DecodingError DecodingError stx:libbasic 'Collections-Text-Encodings' 1
 EncodingError EncodingError stx:libbasic 'Collections-Text-Encodings' 1
 FileDoesNotExistException FileDoesNotExistException stx:libbasic 'Kernel-Exceptions-Errors' 1
 FileStream FileStream stx:libbasic 'Streams-External' 0
+HandleRegistry HandleRegistry stx:libbasic 'System-Support' 0
 ImmutableString ImmutableString stx:libbasic 'System-Compiler-Support' 0
 InvalidByteCodeError InvalidByteCodeError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 1
 InvalidInstructionError InvalidInstructionError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 1
--- a/bc.mak	Thu Jun 30 21:11:02 2016 +0100
+++ b/bc.mak	Thu Jun 30 21:12:35 2016 +0100
@@ -34,7 +34,7 @@
 
 LIBNAME=libstx_libbasic
 MODULE_PATH=libbasic
-RESFILES=libbasic.$(RES)
+RESFILES=stx_libbasicWINrc.$(RES)
 
 
 
@@ -66,7 +66,7 @@
 	$(TOP)\goodies\builder\reports\report-runner.bat -D . -r Builder::TestReport -p $(PACKAGE)
         
 clean::
-	del *.$(CSUFFIX)
+	-del *.$(CSUFFIX)
 
 
 # BEGINMAKEDEPEND --- do not remove this line; make depend needs it
@@ -115,7 +115,6 @@
 $(OUTDIR)ProjectDefinition.$(O) ProjectDefinition.$(C) ProjectDefinition.$(H): ProjectDefinition.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)ReadEvalPrintLoop.$(O) ReadEvalPrintLoop.$(C) ReadEvalPrintLoop.$(H): ReadEvalPrintLoop.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)RecursionLock.$(O) RecursionLock.$(C) RecursionLock.$(H): RecursionLock.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)Registry.$(O) Registry.$(C) Registry.$(H): Registry.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)Semaphore.$(O) Semaphore.$(C) Semaphore.$(H): Semaphore.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)SharedPool.$(O) SharedPool.$(C) SharedPool.$(H): SharedPool.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)Signal.$(O) Signal.$(C) Signal.$(H): Signal.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -134,7 +133,6 @@
 $(OUTDIR)Bag.$(O) Bag.$(C) Bag.$(H): Bag.st $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)BlockContext.$(O) BlockContext.$(C) BlockContext.$(H): BlockContext.st $(INCLUDE_TOP)\stx\libbasic\Context.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)BuiltinLookup.$(O) BuiltinLookup.$(C) BuiltinLookup.$(H): BuiltinLookup.st $(INCLUDE_TOP)\stx\libbasic\Lookup.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)CachingRegistry.$(O) CachingRegistry.$(C) CachingRegistry.$(H): CachingRegistry.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Registry.$(H) $(STCHDR)
 $(OUTDIR)Character.$(O) Character.$(C) Character.$(H): Character.st $(INCLUDE_TOP)\stx\libbasic\Magnitude.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)CharacterEncoderImplementations__ISO10646_1.$(O) CharacterEncoderImplementations__ISO10646_1.$(C) CharacterEncoderImplementations__ISO10646_1.$(H): CharacterEncoderImplementations__ISO10646_1.st $(INCLUDE_TOP)\stx\libbasic\CharacterEncoder.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)CharacterEncoderImplementations__SingleByteEncoder.$(O) CharacterEncoderImplementations__SingleByteEncoder.$(C) CharacterEncoderImplementations__SingleByteEncoder.$(H): CharacterEncoderImplementations__SingleByteEncoder.st $(INCLUDE_TOP)\stx\libbasic\CharacterEncoder.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -146,7 +144,6 @@
 $(OUTDIR)ExternalFunction.$(O) ExternalFunction.$(C) ExternalFunction.$(H): ExternalFunction.st $(INCLUDE_TOP)\stx\libbasic\ExecutableFunction.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)False.$(O) False.$(C) False.$(H): False.st $(INCLUDE_TOP)\stx\libbasic\Boolean.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)FolderForProjectsDefinition.$(O) FolderForProjectsDefinition.$(C) FolderForProjectsDefinition.$(H): FolderForProjectsDefinition.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(STCHDR)
-$(OUTDIR)HandleRegistry.$(O) HandleRegistry.$(C) HandleRegistry.$(H): HandleRegistry.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Registry.$(H) $(STCHDR)
 $(OUTDIR)HashStream.$(O) HashStream.$(C) HashStream.$(H): HashStream.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Stream.$(H) $(STCHDR)
 $(OUTDIR)InlineObjectPrototype.$(O) InlineObjectPrototype.$(C) InlineObjectPrototype.$(H): InlineObjectPrototype.st $(INCLUDE_TOP)\stx\libbasic\InlineObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)JavaPackage.$(O) JavaPackage.$(C) JavaPackage.$(H): JavaPackage.st $(INCLUDE_TOP)\stx\libbasic\NameSpace.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -384,6 +381,7 @@
 $(OUTDIR)PrimitiveFailure.$(O) PrimitiveFailure.$(C) PrimitiveFailure.$(H): PrimitiveFailure.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\ExecutionError.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(STCHDR)
 $(OUTDIR)RangeError.$(O) RangeError.$(C) RangeError.$(H): RangeError.st $(INCLUDE_TOP)\stx\libbasic\ArithmeticError.$(H) $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(STCHDR)
 $(OUTDIR)ReadError.$(O) ReadError.$(C) ReadError.$(H): ReadError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(INCLUDE_TOP)\stx\libbasic\StreamError.$(H) $(STCHDR)
+$(OUTDIR)Registry.$(O) Registry.$(C) Registry.$(H): Registry.st $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Dictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\IdentityDictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Set.$(H) $(INCLUDE_TOP)\stx\libbasic\WeakIdentityDictionary.$(H) $(STCHDR)
 $(OUTDIR)SignedByteArray.$(O) SignedByteArray.$(C) SignedByteArray.$(H): SignedByteArray.st $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\ByteArray.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)StreamIOError.$(O) StreamIOError.$(C) StreamIOError.$(H): StreamIOError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(INCLUDE_TOP)\stx\libbasic\StreamError.$(H) $(STCHDR)
 $(OUTDIR)StreamNotOpenError.$(O) StreamNotOpenError.$(C) StreamNotOpenError.$(H): StreamNotOpenError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(INCLUDE_TOP)\stx\libbasic\StreamError.$(H) $(STCHDR)
@@ -397,10 +395,12 @@
 $(OUTDIR)WrongProceedabilityError.$(O) WrongProceedabilityError.$(C) WrongProceedabilityError.$(H): WrongProceedabilityError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(INCLUDE_TOP)\stx\libbasic\SignalError.$(H) $(STCHDR)
 $(OUTDIR)AbstractClassInstantiationError.$(O) AbstractClassInstantiationError.$(C) AbstractClassInstantiationError.$(H): AbstractClassInstantiationError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\ExecutionError.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\MethodNotAppropriateError.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(STCHDR)
 $(OUTDIR)BadLiteralsError.$(O) BadLiteralsError.$(C) BadLiteralsError.$(H): BadLiteralsError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\ExecutionError.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\InvalidCodeError.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(STCHDR)
+$(OUTDIR)CachingRegistry.$(O) CachingRegistry.$(C) CachingRegistry.$(H): CachingRegistry.st $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Dictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\IdentityDictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Registry.$(H) $(INCLUDE_TOP)\stx\libbasic\Set.$(H) $(INCLUDE_TOP)\stx\libbasic\WeakIdentityDictionary.$(H) $(STCHDR)
 $(OUTDIR)DecodingError.$(O) DecodingError.$(C) DecodingError.$(H): DecodingError.st $(INCLUDE_TOP)\stx\libbasic\CharacterEncoderError.$(H) $(INCLUDE_TOP)\stx\libbasic\ConversionError.$(H) $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(STCHDR)
 $(OUTDIR)EncodingError.$(O) EncodingError.$(C) EncodingError.$(H): EncodingError.st $(INCLUDE_TOP)\stx\libbasic\CharacterEncoderError.$(H) $(INCLUDE_TOP)\stx\libbasic\ConversionError.$(H) $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(STCHDR)
 $(OUTDIR)FileDoesNotExistException.$(O) FileDoesNotExistException.$(C) FileDoesNotExistException.$(H): FileDoesNotExistException.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\OpenError.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(INCLUDE_TOP)\stx\libbasic\StreamError.$(H) $(STCHDR)
 $(OUTDIR)FileStream.$(O) FileStream.$(C) FileStream.$(H): FileStream.st $(INCLUDE_TOP)\stx\libbasic\ExternalStream.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\PeekableStream.$(H) $(INCLUDE_TOP)\stx\libbasic\PositionableStream.$(H) $(INCLUDE_TOP)\stx\libbasic\ReadWriteStream.$(H) $(INCLUDE_TOP)\stx\libbasic\Stream.$(H) $(INCLUDE_TOP)\stx\libbasic\WriteStream.$(H) $(STCHDR)
+$(OUTDIR)HandleRegistry.$(O) HandleRegistry.$(C) HandleRegistry.$(H): HandleRegistry.st $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Dictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\IdentityDictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Registry.$(H) $(INCLUDE_TOP)\stx\libbasic\Set.$(H) $(INCLUDE_TOP)\stx\libbasic\WeakIdentityDictionary.$(H) $(STCHDR)
 $(OUTDIR)ImmutableString.$(O) ImmutableString.$(C) ImmutableString.$(H): ImmutableString.st $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\CharacterArray.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\String.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)InvalidByteCodeError.$(O) InvalidByteCodeError.$(C) InvalidByteCodeError.$(H): InvalidByteCodeError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\ExecutionError.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\InvalidCodeError.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(STCHDR)
 $(OUTDIR)InvalidInstructionError.$(O) InvalidInstructionError.$(C) InvalidInstructionError.$(H): InvalidInstructionError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\ExecutionError.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\InvalidCodeError.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(STCHDR)
--- a/libInit.cc	Thu Jun 30 21:11:02 2016 +0100
+++ b/libInit.cc	Thu Jun 30 21:12:35 2016 +0100
@@ -61,7 +61,6 @@
 extern void _ProjectDefinition_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _ReadEvalPrintLoop_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _RecursionLock_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
-extern void _Registry_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _Semaphore_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _SharedPool_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _Signal_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
@@ -80,7 +79,6 @@
 extern void _Bag_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _BlockContext_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _BuiltinLookup_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
-extern void _CachingRegistry_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _Character_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _CharacterEncoderImplementations__ISO10646_1371_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _CharacterEncoderImplementations__SingleByteEncoder_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
@@ -92,7 +90,6 @@
 extern void _ExternalFunction_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _False_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _FolderForProjectsDefinition_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
-extern void _HandleRegistry_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _HashStream_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _InlineObjectPrototype_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _JavaPackage_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
@@ -330,6 +327,7 @@
 extern void _PrimitiveFailure_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _RangeError_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _ReadError_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _Registry_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _SignedByteArray_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _StreamIOError_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _StreamNotOpenError_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
@@ -343,10 +341,12 @@
 extern void _WrongProceedabilityError_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _AbstractClassInstantiationError_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _BadLiteralsError_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _CachingRegistry_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _DecodingError_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _EncodingError_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _FileDoesNotExistException_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _FileStream_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _HandleRegistry_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _ImmutableString_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _InvalidByteCodeError_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _InvalidInstructionError_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
@@ -447,7 +447,6 @@
     _ProjectDefinition_Init(pass,__pRT__,snd);
     _ReadEvalPrintLoop_Init(pass,__pRT__,snd);
     _RecursionLock_Init(pass,__pRT__,snd);
-    _Registry_Init(pass,__pRT__,snd);
     _Semaphore_Init(pass,__pRT__,snd);
     _SharedPool_Init(pass,__pRT__,snd);
     _Signal_Init(pass,__pRT__,snd);
@@ -466,7 +465,6 @@
     _Bag_Init(pass,__pRT__,snd);
     _BlockContext_Init(pass,__pRT__,snd);
     _BuiltinLookup_Init(pass,__pRT__,snd);
-    _CachingRegistry_Init(pass,__pRT__,snd);
     _Character_Init(pass,__pRT__,snd);
     _CharacterEncoderImplementations__ISO10646_1371_Init(pass,__pRT__,snd);
     _CharacterEncoderImplementations__SingleByteEncoder_Init(pass,__pRT__,snd);
@@ -478,7 +476,6 @@
     _ExternalFunction_Init(pass,__pRT__,snd);
     _False_Init(pass,__pRT__,snd);
     _FolderForProjectsDefinition_Init(pass,__pRT__,snd);
-    _HandleRegistry_Init(pass,__pRT__,snd);
     _HashStream_Init(pass,__pRT__,snd);
     _InlineObjectPrototype_Init(pass,__pRT__,snd);
     _JavaPackage_Init(pass,__pRT__,snd);
@@ -716,6 +713,7 @@
     _PrimitiveFailure_Init(pass,__pRT__,snd);
     _RangeError_Init(pass,__pRT__,snd);
     _ReadError_Init(pass,__pRT__,snd);
+    _Registry_Init(pass,__pRT__,snd);
     _SignedByteArray_Init(pass,__pRT__,snd);
     _StreamIOError_Init(pass,__pRT__,snd);
     _StreamNotOpenError_Init(pass,__pRT__,snd);
@@ -729,10 +727,12 @@
     _WrongProceedabilityError_Init(pass,__pRT__,snd);
     _AbstractClassInstantiationError_Init(pass,__pRT__,snd);
     _BadLiteralsError_Init(pass,__pRT__,snd);
+    _CachingRegistry_Init(pass,__pRT__,snd);
     _DecodingError_Init(pass,__pRT__,snd);
     _EncodingError_Init(pass,__pRT__,snd);
     _FileDoesNotExistException_Init(pass,__pRT__,snd);
     _FileStream_Init(pass,__pRT__,snd);
+    _HandleRegistry_Init(pass,__pRT__,snd);
     _ImmutableString_Init(pass,__pRT__,snd);
     _InvalidByteCodeError_Init(pass,__pRT__,snd);
     _InvalidInstructionError_Init(pass,__pRT__,snd);
--- a/stx_libbasic.st	Thu Jun 30 21:11:02 2016 +0100
+++ b/stx_libbasic.st	Thu Jun 30 21:12:35 2016 +0100
@@ -215,7 +215,6 @@
         ProjectDefinition
         ReadEvalPrintLoop
         RecursionLock
-        Registry
         Semaphore
         SharedPool
         Signal
@@ -234,7 +233,6 @@
         Bag
         BlockContext
         BuiltinLookup
-        CachingRegistry
         Character
         #'CharacterEncoderImplementations::ISO10646_1'
         #'CharacterEncoderImplementations::SingleByteEncoder'
@@ -246,7 +244,6 @@
         ExternalFunction
         False
         FolderForProjectsDefinition
-        HandleRegistry
         HashStream
         InlineObjectPrototype
         JavaPackage
@@ -488,6 +485,7 @@
         PrimitiveFailure
         RangeError
         ReadError
+        Registry
         SignedByteArray
         StreamIOError
         StreamNotOpenError
@@ -501,10 +499,12 @@
         WrongProceedabilityError
         AbstractClassInstantiationError
         BadLiteralsError
+        CachingRegistry
         DecodingError
         EncodingError
         FileDoesNotExistException
         FileStream
+        HandleRegistry
         ImmutableString
         InvalidByteCodeError
         InvalidInstructionError
@@ -591,8 +591,10 @@
 !
 
 extensionMethodNames
-    "list class/selector pairs of extensions.
-     A correponding method with real names must be present in my concrete subclasses"
+    "lists the extension methods which are to be included in the project.
+     Entries are 2-element array literals, consisting of class-name and selector.
+     A correponding method with real names must be present in my concrete subclasses
+     if it has extensions."
 
     ^ #(
     )
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stx_libbasicWINrc.rc	Thu Jun 30 21:12:35 2016 +0100
@@ -0,0 +1,37 @@
+//
+// DO NOT EDIT
+// automagically generated from the projectDefinition: stx_libbasic.
+//
+VS_VERSION_INFO VERSIONINFO
+  FILEVERSION     7,1,1,161
+  PRODUCTVERSION  7,1,0,0
+#if (__BORLANDC__)
+  FILEFLAGSMASK   VS_FF_DEBUG | VS_FF_PRERELEASE
+  FILEFLAGS       VS_FF_PRERELEASE | VS_FF_SPECIALBUILD
+  FILEOS          VOS_NT_WINDOWS32
+  FILETYPE        VFT_DLL
+  FILESUBTYPE     VS_USER_DEFINED
+#endif
+
+BEGIN
+  BLOCK "StringFileInfo"
+  BEGIN
+    BLOCK "040904E4"
+    BEGIN
+      VALUE "CompanyName", "eXept Software AG\0"
+      VALUE "FileDescription", "Smalltalk/X Basic Classes (LIB)\0"
+      VALUE "FileVersion", "7.1.1.161\0"
+      VALUE "InternalName", "stx:libbasic\0"
+      VALUE "LegalCopyright", "Copyright Claus Gittinger 1988-2012\nCopyright eXept Software AG 2013\0"
+      VALUE "ProductName", "Smalltalk/X\0"
+      VALUE "ProductVersion", "7.1.0.0\0"
+      VALUE "ProductDate", "Tue, 28 Jun 2016 19:17:02 GMT\0"
+    END
+
+  END
+
+  BLOCK "VarFileInfo"
+  BEGIN                               //  Language   |    Translation
+    VALUE "Translation", 0x409, 0x4E4 // U.S. English, Windows Multilingual
+  END
+END