diff --git a/tenet/scheme/amr_rule/transduction/atomic_individual_extractor.py b/tenet/scheme/amr_rule/transduction/atomic_individual_extractor.py
index 54a181a705baf19ebe35ea2784d2783f9f4f64ef..d67bf67b98735e75bebd544fbf6d74766e505e3b 100644
--- a/tenet/scheme/amr_rule/transduction/atomic_individual_extractor.py
+++ b/tenet/scheme/amr_rule/transduction/atomic_individual_extractor.py
@@ -17,7 +17,7 @@ from transduction.naming_computer import define_composite_naming_1, define_restr
 
 
 #==============================================================================
-# Select Pattern: leaf{variable, concept}
+# Pattern Search: Leaf{variable, concept} corresponding to individual
 #==============================================================================
 
 def __rule_pattern_query_code(graph):
diff --git a/tenet/scheme/amr_rule/transduction/atomic_property_extractor.py b/tenet/scheme/amr_rule/transduction/atomic_property_extractor.py
index 1c45787547cabb2edddf6d3073261d43ac7b9ee5..b658a3a9b52ddaaccb73105ccf6ecf39fa2d3a8c 100644
--- a/tenet/scheme/amr_rule/transduction/atomic_property_extractor.py
+++ b/tenet/scheme/amr_rule/transduction/atomic_property_extractor.py
@@ -12,32 +12,54 @@ from rdflib import Graph
 
 import transduction
 from transduction import net
+from transduction import rdfterm_computer
 from transduction.query_builder import generate_select_query
 from transduction.naming_computer import define_composite_naming_1, define_restriction_naming
 
 
 #==============================================================================
-# Select Pattern: leaf{variable, amrTermConcept}
+# Pattern Search: Leaf{variable, amrPrecicateConcept}
 #==============================================================================
 
 def __rule_pattern_query_code(graph):
-    select_data_list = ['?leaf', '?conceptName']
+    select_data_list = ['?baseLeaf', '?predicateLabel']
     clause_list = []
-    clause_list.append(f'?leaf a amr:AMR_Leaf.')
-    clause_list.append(f'?leaf amr:hasConcept ?leafConcept.')
-    clause_list.append(f'?leafConcept rdfs:subClassOf amr:AMR_Term_Concept.')
-    clause_list.append(f'?leafConcept amr:label ?conceptName.')
+    clause_list.append(f'?baseLeaf a amr:AMR_Leaf.')
+    clause_list.append(f'?baseLeaf amr:hasConcept ?leafConcept.')
+    clause_list.append(f'?leafConcept rdfs:subClassOf amr:AMR_Predicat_Concept.')
+    clause_list.append(f'?leafConcept amr:label ?predicateLabel.')
     query_code = generate_select_query(graph, select_data_list, clause_list)
     return query_code
-    
-       
+        
+
 def __search_pattern(graph):
     query_code = __rule_pattern_query_code(graph)  
-    rule_pattern_set = graph.query(query_code) 
-    return rule_pattern_set
+    result_set = graph.query(query_code) 
+    return result_set
+
+
+#==============================================================================
+# Useful Additional Search
+#==============================================================================
+
 
 
 
+def __target_argument_pattern_query_code(graph, base_leaf_uri):
+    select_data_list = ['?argLeaf']
+    clause_list = []
+    clause_list.append((base_leaf_uri, '?relation', '?argLeaf'))
+    clause_list.append(f'?relation amr:hasAmrRole ?someArgRole.')
+    query_code = generate_select_query(graph, select_data_list, clause_list)
+    return query_code 
+    
+
+def __search_target_argument(graph, base_leaf_uri):
+    query_code = __target_argument_pattern_query_code(graph, base_leaf_uri)  
+    result_set = graph.query(query_code) 
+    return result_set
+
+
 #==============================================================================
 # Relation Propagation
 #==============================================================================
@@ -63,32 +85,47 @@ def __propagate_relation(target_net, leaf):
 # Construct Method(s)
 #==============================================================================    
 
-def __define_naming(todo):
-    pass
 
+    
+
+def __define_naming(predicate_label):
+    naming = predicate_label.split('-')[0]
+    return naming
 
-def __construct_atom_class_net(graph, leaf, concept_name):
+
+def __construct_atom_property_net(graph, base_leaf, predicate_label):
 
     # -- Net Composition
-    atom_class_net = net.AtomClassNet(graph)
+    atom_property_net = net.AtomPropertyNet(graph)
     
     # -- Data Computation
-    atom_class_net.base_node = leaf
-    atom_class_net.node = leaf
-    atom_class_net.class_name = concept_name
-    # TODO: atom_class_net.class_name = get_structure(graph)
+    atom_property_net.base_node = base_leaf
+    atom_property_net.node = base_leaf
+    atom_property_net.property_type = 'owl:ObjectProperty'
+    atom_property_net.core_role = 'true'
+    # atom_property_net.structure = __get_structure(graph)
+    
+    # -- Target Argument
+    target_argument_set = __search_target_argument(graph, base_leaf)
+    for data in target_argument_set:
+        atom_property_net.target_argument_node += [data.argLeaf]
     
     # -- Relation Propagation
-    __propagate_relation(atom_class_net, leaf) 
+    __propagate_relation(atom_property_net, base_leaf) 
 
     # -- Net Naming
-    atom_class_net.naming = concept_name
+    naming = __define_naming(predicate_label)
+    atom_property_net.naming = naming
+    atom_property_net.property_name = naming
+    atom_property_net.property_name01 = f'{naming}ing'
+    atom_property_net.property_name10 = f'{naming}-by'
+    atom_property_net.property_name12 = f'{naming}-of'
     
     # -- Finalization
-    atom_class_net.finalize()
-    triple_definition = atom_class_net.generate_triple_definition()
+    atom_property_net.finalize()
+    triple_definition = atom_property_net.generate_triple_definition()
     
-    return atom_class_net, triple_definition
+    return atom_property_net, triple_definition
 
   
     
@@ -109,11 +146,10 @@ def extract_atomic_property(graph):
     for pattern in rule_pattern_set:
         
         # -- New Net Construction (from 3 nets)
-        new_class, triple_list = __construct_atom_class_net(
-            graph, pattern.leaf, pattern.conceptName)
+        new_net, triple_list = __construct_atom_property_net(
+            graph, pattern.baseLeaf, pattern.predicateLabel)
             
         # -- Resulting List Update
-        # class_net_list.append(new_class)
         rule_triple_list += triple_list
             
     return rule_label, rule_triple_list
\ No newline at end of file
diff --git a/tenet/scheme/amr_rule/transduction/phenomena_or_analyzer_1.py b/tenet/scheme/amr_rule/transduction/phenomena_or_analyzer_1.py
index 168f1a36c65316d66d67992c3487f6edbc8faa98..d9132ed2dbb2fc897ef0aa465dec9b0bf3f0b72c 100644
--- a/tenet/scheme/amr_rule/transduction/phenomena_or_analyzer_1.py
+++ b/tenet/scheme/amr_rule/transduction/phenomena_or_analyzer_1.py
@@ -41,7 +41,7 @@ def __search_pattern(graph):
 
 
 #==============================================================================
-# Search for phenomena operators: 
+# Search for phenomena operators
 #==============================================================================
 
 def __class_op_pattern_query_code(graph, phenomena_net_uri, num):
diff --git a/tests/dev_tests/test_data/atom-extraction-devGraph-1.result.ttl b/tests/dev_tests/test_data/atom-extraction-devGraph-1.result.ttl
index 180a9683afd98e2ec5fb03226af33fb3b5b677cf..50faaa362a34b9f8f3c64f30e4b12230d92e4945 100644
--- a/tests/dev_tests/test_data/atom-extraction-devGraph-1.result.ttl
+++ b/tests/dev_tests/test_data/atom-extraction-devGraph-1.result.ttl
@@ -192,26 +192,6 @@ ns2:root a owl:AnnotationProperty .
 :label a owl:AnnotationProperty ;
     rdfs:subPropertyOf :AMR_AnnotationProperty .
 
-:leaf_bind-01_b a :AMR_Leaf ;
-    :edge_b_ARG0_g :leaf_gravitation_g ;
-    :edge_b_ARG1_s :leaf_system_s ;
-    :hasConcept :concept_bind-01 ;
-    :hasVariable :variable_b .
-
-:leaf_hasManner_m9 a :AMR_Leaf ;
-    :edge_m9_ARG0_o2 :leaf_orbit-01_o2 ;
-    :edge_m9_ARG1_o3 :leaf_or_o3 ;
-    :hasConcept :concept_manner ;
-    :hasVariable :variable_m9 ;
-    :isReifiedLeaf true .
-
-:leaf_hasPart_p9 a :AMR_Leaf ;
-    :edge_p9_ARG0_s :leaf_system_s ;
-    :edge_p9_ARG1_a :leaf_and_a ;
-    :hasConcept :concept_part ;
-    :hasVariable :variable_p9 ;
-    :isReifiedLeaf true .
-
 :phenomena_degree a owl:Class ;
     rdfs:subClassOf :AMR_Phenomena ;
     :hasConceptLink "have-degree-91" ;
@@ -428,9 +408,6 @@ cprm:targetOntologyURI a rdf:Property ;
 
 <https://tenet.tetras-libre.fr/semantic-net> a owl:Ontology .
 
-net:Atom_Property_Net a owl:Class ;
-    rdfs:subClassOf net:Property_Net .
-
 net:Composite_Class_Net a owl:Class ;
     rdfs:subClassOf net:Class_Net .
 
@@ -505,6 +482,81 @@ net:atomOf a owl:AnnotationProperty ;
     rdfs:label "atom of" ;
     rdfs:subPropertyOf net:typeProperty .
 
+net:atomProperty_bind_b a net:Atom_Property_Net ;
+    net:coverBaseNode :leaf_bind-01_b ;
+    net:coverNode :leaf_bind-01_b ;
+    net:hasNaming "bind" ;
+    net:hasPropertyName "bind" ;
+    net:hasPropertyName01 "binding" ;
+    net:hasPropertyName10 "bind-by" ;
+    net:hasPropertyName12 "bind-of" ;
+    net:hasPropertyType owl:ObjectProperty ;
+    net:isCoreRoleLinked "true" ;
+    net:targetArgumentNode :leaf_gravitation_g,
+        :leaf_system_s .
+
+net:atomProperty_direct_d a net:Atom_Property_Net ;
+    net:coverBaseNode :leaf_direct-02_d ;
+    net:coverNode :leaf_direct-02_d ;
+    net:hasNaming "direct" ;
+    net:hasPropertyName "direct" ;
+    net:hasPropertyName01 "directing" ;
+    net:hasPropertyName10 "direct-by" ;
+    net:hasPropertyName12 "direct-of" ;
+    net:hasPropertyType owl:ObjectProperty ;
+    net:isCoreRoleLinked "true" .
+
+net:atomProperty_direct_d2 a net:Atom_Property_Net ;
+    net:coverBaseNode :leaf_direct-02_d2 ;
+    net:coverNode :leaf_direct-02_d2 ;
+    net:hasNaming "direct" ;
+    net:hasPropertyName "direct" ;
+    net:hasPropertyName01 "directing" ;
+    net:hasPropertyName10 "direct-by" ;
+    net:hasPropertyName12 "direct-of" ;
+    net:hasPropertyType owl:ObjectProperty ;
+    net:isCoreRoleLinked "true" ;
+    net:targetArgumentNode :value_negative .
+
+net:atomProperty_hasManner_m9 a net:Atom_Property_Net ;
+    net:coverBaseNode :leaf_hasManner_m9 ;
+    net:coverNode :leaf_hasManner_m9 ;
+    net:hasNaming "hasManner" ;
+    net:hasPropertyName "hasManner" ;
+    net:hasPropertyName01 "hasMannering" ;
+    net:hasPropertyName10 "hasManner-by" ;
+    net:hasPropertyName12 "hasManner-of" ;
+    net:hasPropertyType owl:ObjectProperty ;
+    net:isCoreRoleLinked "true" ;
+    net:targetArgumentNode :leaf_or_o3,
+        :leaf_orbit-01_o2 .
+
+net:atomProperty_hasPart_p9 a net:Atom_Property_Net ;
+    net:coverBaseNode :leaf_hasPart_p9 ;
+    net:coverNode :leaf_hasPart_p9 ;
+    net:hasNaming "hasPart" ;
+    net:hasPropertyName "hasPart" ;
+    net:hasPropertyName01 "hasParting" ;
+    net:hasPropertyName10 "hasPart-by" ;
+    net:hasPropertyName12 "hasPart-of" ;
+    net:hasPropertyType owl:ObjectProperty ;
+    net:isCoreRoleLinked "true" ;
+    net:targetArgumentNode :leaf_and_a,
+        :leaf_system_s .
+
+net:atomProperty_orbit_o2 a net:Atom_Property_Net ;
+    net:coverBaseNode :leaf_orbit-01_o2 ;
+    net:coverNode :leaf_orbit-01_o2 ;
+    net:hasNaming "orbit" ;
+    net:hasPropertyName "orbit" ;
+    net:hasPropertyName01 "orbiting" ;
+    net:hasPropertyName10 "orbit-by" ;
+    net:hasPropertyName12 "orbit-of" ;
+    net:hasPropertyType owl:ObjectProperty ;
+    net:isCoreRoleLinked "true" ;
+    net:targetArgumentNode :leaf_object_o,
+        :leaf_sun_s2 .
+
 net:atomType a owl:AnnotationProperty ;
     rdfs:label "atom type" ;
     rdfs:subPropertyOf net:objectType .
@@ -753,33 +805,6 @@ ns2:AMR a owl:Class ;
     :fromAmrLk ns11:sun ;
     :label "sun" .
 
-:leaf_and_a a :AMR_Leaf ;
-    :edge_a_op1_s2 :leaf_sun_s2 ;
-    :edge_a_op2_o :leaf_object_o ;
-    :hasConcept :concept_and ;
-    :hasVariable :variable_a .
-
-:leaf_direct-02_d a :AMR_Leaf ;
-    :hasConcept :concept_direct-02 ;
-    :hasVariable :variable_d .
-
-:leaf_direct-02_d2 a :AMR_Leaf ;
-    :edge_d2_polarity_negative :value_negative ;
-    :hasConcept :concept_direct-02 ;
-    :hasVariable :variable_d2 .
-
-:leaf_or_o3 a :AMR_Leaf ;
-    :edge_o3_op1_d :leaf_direct-02_d ;
-    :edge_o3_op2_d2 :leaf_direct-02_d2 ;
-    :hasConcept :concept_or ;
-    :hasVariable :variable_o3 .
-
-:leaf_orbit-01_o2 a :AMR_Leaf ;
-    :edge_o2_ARG0_o :leaf_object_o ;
-    :edge_o2_ARG1_s2 :leaf_sun_s2 ;
-    :hasConcept :concept_orbit-01 ;
-    :hasVariable :variable_o2 .
-
 :phenomena_conjunction_and a owl:Class ;
     rdfs:subClassOf :phenomena_conjunction ;
     :hasConceptLink "and" ;
@@ -809,9 +834,6 @@ ns2:AMR a owl:Class ;
 :value_SolarSystem a :AMR_Value ;
     rdfs:label "Solar System" .
 
-:value_negative a :AMR_Value ;
-    rdfs:label "negative" .
-
 :variable_a a :AMR_Variable ;
     :fromAmrLk <http://amr.isi.edu/amr_data/SSC-01-01#a> ;
     :label "a" .
@@ -991,6 +1013,38 @@ ns2:or a ns2:Concept ;
 :hasLink a owl:AnnotationProperty ;
     rdfs:subPropertyOf :AMR_AnnotationProperty .
 
+:leaf_and_a a :AMR_Leaf ;
+    :edge_a_op1_s2 :leaf_sun_s2 ;
+    :edge_a_op2_o :leaf_object_o ;
+    :hasConcept :concept_and ;
+    :hasVariable :variable_a .
+
+:leaf_bind-01_b a :AMR_Leaf ;
+    :edge_b_ARG0_g :leaf_gravitation_g ;
+    :edge_b_ARG1_s :leaf_system_s ;
+    :hasConcept :concept_bind-01 ;
+    :hasVariable :variable_b .
+
+:leaf_hasManner_m9 a :AMR_Leaf ;
+    :edge_m9_ARG0_o2 :leaf_orbit-01_o2 ;
+    :edge_m9_ARG1_o3 :leaf_or_o3 ;
+    :hasConcept :concept_manner ;
+    :hasVariable :variable_m9 ;
+    :isReifiedLeaf true .
+
+:leaf_hasPart_p9 a :AMR_Leaf ;
+    :edge_p9_ARG0_s :leaf_system_s ;
+    :edge_p9_ARG1_a :leaf_and_a ;
+    :hasConcept :concept_part ;
+    :hasVariable :variable_p9 ;
+    :isReifiedLeaf true .
+
+:leaf_or_o3 a :AMR_Leaf ;
+    :edge_o3_op1_d :leaf_direct-02_d ;
+    :edge_o3_op2_d2 :leaf_direct-02_d2 ;
+    :hasConcept :concept_or ;
+    :hasVariable :variable_o3 .
+
 :phenomena_conjunction a owl:Class ;
     rdfs:subClassOf :AMR_Phenomena ;
     :hasConceptLink "contrast-01",
@@ -1006,6 +1060,9 @@ ns2:or a ns2:Concept ;
     rdfs:subClassOf :AMR_Op_Role ;
     :label "op2" .
 
+:value_negative a :AMR_Value ;
+    rdfs:label "negative" .
+
 sys:Out_ObjectProperty a owl:ObjectProperty .
 
 net:Class_Net a owl:Class ;
@@ -1053,9 +1110,14 @@ ns2:Frame a ns2:Concept,
     rdfs:range rdfs:Literal ;
     rdfs:subPropertyOf :AMR_AnnotationProperty .
 
-:leaf_gravitation_g a :AMR_Leaf ;
-    :hasConcept :concept_gravitation ;
-    :hasVariable :variable_g .
+:leaf_direct-02_d a :AMR_Leaf ;
+    :hasConcept :concept_direct-02 ;
+    :hasVariable :variable_d .
+
+:leaf_direct-02_d2 a :AMR_Leaf ;
+    :edge_d2_polarity_negative :value_negative ;
+    :hasConcept :concept_direct-02 ;
+    :hasVariable :variable_d2 .
 
 :toReify a owl:AnnotationProperty ;
     rdfs:subPropertyOf :AMR_AnnotationProperty .
@@ -1080,13 +1142,15 @@ ns3:FrameRole a ns2:Role,
 :AMR_Term_Concept a owl:Class ;
     rdfs:subClassOf :AMR_Concept .
 
-:leaf_object_o a :AMR_Leaf ;
-    :hasConcept :concept_object ;
-    :hasVariable :variable_o .
+:leaf_gravitation_g a :AMR_Leaf ;
+    :hasConcept :concept_gravitation ;
+    :hasVariable :variable_g .
 
-:leaf_sun_s2 a :AMR_Leaf ;
-    :hasConcept :concept_sun ;
-    :hasVariable :variable_s2 .
+:leaf_orbit-01_o2 a :AMR_Leaf ;
+    :edge_o2_ARG0_o :leaf_object_o ;
+    :edge_o2_ARG1_s2 :leaf_sun_s2 ;
+    :hasConcept :concept_orbit-01 ;
+    :hasVariable :variable_o2 .
 
 :role_ARG0 a owl:Class ;
     rdfs:subClassOf :AMR_Core_Role ;
@@ -1108,16 +1172,19 @@ net:typeProperty a owl:AnnotationProperty ;
 :AMR_Role a owl:Class ;
     rdfs:subClassOf :AMR_Element .
 
+:leaf_object_o a :AMR_Leaf ;
+    :hasConcept :concept_object ;
+    :hasVariable :variable_o .
+
+:leaf_sun_s2 a :AMR_Leaf ;
+    :hasConcept :concept_sun ;
+    :hasVariable :variable_s2 .
+
 :leaf_system_p a :AMR_Leaf ;
     :edge_p_name_SolarSystem :value_SolarSystem ;
     :hasConcept :concept_system ;
     :hasVariable :variable_p .
 
-:leaf_system_s a :AMR_Leaf ;
-    :edge_s_domain_p :leaf_system_p ;
-    :hasConcept :concept_system ;
-    :hasVariable :variable_s .
-
 sys:Out_Structure a owl:Class ;
     rdfs:label "Output Ontology Structure" .
 
@@ -1135,6 +1202,9 @@ net:netProperty a owl:AnnotationProperty ;
 cprm:configParamProperty a rdf:Property ;
     rdfs:label "Config Parameter Property" .
 
+net:Atom_Property_Net a owl:Class ;
+    rdfs:subClassOf net:Property_Net .
+
 net:Net_Structure a owl:Class ;
     rdfs:label "Semantic Net Structure" ;
     rdfs:comment "A semantic net captures a set of nodes, and associates this set with type(s) and value(s)." .
@@ -1144,6 +1214,11 @@ rdf:Property a owl:Class .
 :AMR_Relation a owl:Class ;
     rdfs:subClassOf :AMR_Structure .
 
+:leaf_system_s a :AMR_Leaf ;
+    :edge_s_domain_p :leaf_system_p ;
+    :hasConcept :concept_system ;
+    :hasVariable :variable_s .
+
 net:Type a owl:Class ;
     rdfs:label "Semantic Net Type" ;
     rdfs:subClassOf net:Net_Structure .
diff --git a/tests/dev_tests/test_rule_atomic_extractor.py b/tests/dev_tests/test_rule_atomic_extractor.py
index af118602b11184121ff64d2ea64abd6d8afecdc6..ae661dd47dba420b39b26fe92d3ce563e6e76942 100644
--- a/tests/dev_tests/test_rule_atomic_extractor.py
+++ b/tests/dev_tests/test_rule_atomic_extractor.py
@@ -27,6 +27,7 @@ from tenet.transduction import rdfterm_computer, prefix_handle
 from tenet.transduction import net
 from tenet.scheme.amr_rule.transduction import atomic_class_extractor as rule_1
 from tenet.scheme.amr_rule.transduction import atomic_individual_extractor as rule_2
+from tenet.scheme.amr_rule.transduction import atomic_property_extractor as rule_3
 from tenet.scheme import amr_rule
 
 
@@ -100,6 +101,17 @@ def test_search_pattern_2(graph):
         result_str += f' {selection.classNet.n3(graph.namespace_manager)}'
         print(result_str) 
     return pattern_result_set
+
+        
+def test_search_pattern_3(graph):
+    pattern_result_set = rule_3.__search_pattern(graph)
+    print(f'\n ----- number of selection found: {len(pattern_result_set)}')
+    for selection in pattern_result_set: 
+        result_str = f'>>> '
+        result_str += f'{selection.baseLeaf.n3(graph.namespace_manager)}'
+        result_str += f' {selection.predicateLabel.n3(graph.namespace_manager)}'
+        print(result_str) 
+    return pattern_result_set
     
 
 #==============================================================================
@@ -150,5 +162,18 @@ if __name__ == '__main__':
     print('\n *** Unit Test ***')
     test_rule_application(graph, rule_2.extract_atomic_individual)
     print('\n \n')
+    print('\n \n')
+    
+    print('\n ///////////////////// Extraction Rule 3')
+    print('\n *** Step Test ***')
+    
+    print('\n -- Step 1: Search Pattern')
+    pattern_set = test_search_pattern_3(graph)
+    
+    print('\n \n')
+    
+    print('\n *** Unit Test ***')
+    test_rule_application(graph, rule_3.extract_atomic_property)
+    print('\n \n')
 
     print('\n *** - ***')
\ No newline at end of file