Index: ruby/trunk/lib/models/rm/support/identification.rb
===================================================================
--- ruby/trunk/lib/models/rm/support/identification.rb	(revision 97)
+++ ruby/trunk/lib/models/rm/support/identification.rb	(revision 98)
@@ -169,8 +169,75 @@
         end
 
+        class Party_Ref < Object_Ref
+          TYPE = ['PERSON', 'ORGANISATION', 'GROUP', 'AGENT', 'ROLE',' PARTY', 'ACTOR']
+          def initialize(namespace, type, id)
+            super(namespace, type, id)
+          end
+
+          def type=(type)
+            raise ArgumentError, 'type mismatch' if !TYPE.include? type
+            @type = type
+          end
+        end
         class Hier_Object_ID < UID_Based_ID
 
         end
 
+        class Version_Tree_ID
+          attr_reader :value, :trunk_version, :branch_number, :branch_version
+
+          def initialize(value)
+            self.value = value
+          end
+
+          def value=(value)
+            raise ArgumentError, 'value invalid' if value.nil? or value.empty?
+            @value = value
+            (trunk_version, branch_number, branch_version) = value.split '.'
+            self.trunk_version =trunk_version
+          end
+
+          def trunk_version=(trunk_version)
+            Raise ArgumentError, 'trunk_version invalid' if trunk_version.nil? and trunk_version.to_i >= 0
+            @trunk_version = trunk_version
+          end
+
+          def branch_number=(branch_number)
+            Raise ArgumentError, 'branch number invalid' if branch_nmuber.nil?
+          end
+
+          def is_branch?
+            !@branch_version.nil?
+          end
+          private
+          def value_valid
+            
+          end
+        end
+
+        class UID
+          attr_reader :value
+
+          def initialize(value)
+            self.value = value
+          end
+
+          def value=(value)
+            raise ArgumentError if value.nil? or value.empty?
+            @value = value
+          end
+        end
+
+        class UUID < UID
+
+        end
+
+        class Internet_ID <UID
+          
+        end
+
+        class ISO_OID <UID
+
+        end
       end # of Identification
     end # of Support
Index: ruby/trunk/lib/models/tests/test_reference_model.rb
===================================================================
--- ruby/trunk/lib/models/tests/test_reference_model.rb	(revision 97)
+++ ruby/trunk/lib/models/tests/test_reference_model.rb	(revision 98)
@@ -154,4 +154,5 @@
     assert_nothing_raised(Exception){@hier_object_id = OpenEHR::RM::Support::Identification::Hier_Object_ID.new('0.0.4')}
     assert_nothing_raised(Exception){@locatable_ref = OpenEHR::RM::Support::Identification::Locatable_Ref.new('unknown', 'PERSON', @uid_based_id, 'data/event[at0001, standing]')}
+    assert_nothing_raised(Exception){@party_ref = OpenEHR::RM::Support::Identification::Party_Ref.new('unknown', 'ORGANISATION', @object_id)}
   end
   
@@ -166,4 +167,5 @@
     assert_instance_of OpenEHR::RM::Support::Identification::Hier_Object_ID, @hier_object_id
     assert_instance_of OpenEHR::RM::Support::Identification::Locatable_Ref, @locatable_ref
+    assert_instance_of OpenEHR::RM::Support::Identification::Party_Ref, @party_ref
   end
 
@@ -347,5 +349,5 @@
 
   def test_locatable_ref
-# test constructor function
+# test constructorpp
     assert_equal 'unknown', @locatable_ref.namespace
     assert_equal 'PERSON', @locatable_ref.type
@@ -358,3 +360,19 @@
     assert_equal 'ehr://rrip::0.0.3/data/event[at0002, tilting]', @locatable_ref.as_uri
   end
+
+  def test_party_ref
+# test constructor
+    assert_equal 'unknown', @party_ref.namespace
+    assert_equal 'ORGANISATION', @party_ref.type
+    assert_equal @object_id, @party_ref.id
+# test type validation
+    assert_raise(ArgumentError){@party_ref.type = 'GUIDELINE'}
+    assert_nothing_raised(Exception){@party_ref.type = 'PERSON'}
+    assert_equal 'PERSON', @party_ref.type
+    assert_nothing_raised(Exception){@party_ref.type = 'GROUP'}
+    assert_nothing_raised(Exception){@party_ref.type = 'AGENT'}
+    assert_nothing_raised(Exception){@party_ref.type = 'ROLE'}
+    assert_nothing_raised(Exception){@party_ref.type = 'PARTY'}
+    assert_nothing_raised(Exception){@party_ref.type = 'ACTOR'}
+  end
 end
