diff --git a/neologism.install b/neologism.install
new file mode 100644
index 0000000..8d85cab
--- /dev/null
+++ b/neologism.install
@@ -0,0 +1,555 @@
+<?php
+
+/**
+ * @file
+ * Install file for Neologism module. Registers three bundles : Vocabulary, Class and Property
+ */
+
+
+// url('<front>', array('absolute' => TRUE))
+
+/**
+ * Implements hook_install().
+ *
+ * reference for taking 'base' => 'node_content' : http://drupal.org/node/224333
+ */ 
+
+function neologism_install() {
+  // use get_t() to get the name of our localization function for translation
+  // during install, when t() is not available.
+  $t = get_t();
+
+  // Define the bundles.
+  $neologism_entities = array(
+    1 => array(
+      'type' => 'property',
+      'name' => $t('Property'),
+      'base' => 'node_content',
+      'description' => $t('Create predicates for your Vocabulary.'),
+      'help' => 'Create predicates for your Vocabulary.',
+      'custom' => 1, 
+      'modified' => 1,        
+      'locked' => 0,
+      'has_title' => 0,
+      ),
+    2 => array(
+      'type' => 'class',
+      'name' => $t('Class'),
+      'base' => 'node_content',
+      'description' => $t('Create Classes for your Vocabulary.'),
+      'help' => 'Create Classes for your Vocabulary.',
+      'custom' => 1, 
+      'modified' => 1,        
+      'locked' => 0,
+      'has_title' => 0,
+      ),
+    3 => array(
+      'type' => 'vocabulary',
+      'name' => $t('Vocabulary'),
+      'base' => 'node_content',
+      'description' => $t('Create an RDF Vocabulary.'),
+      'help' => 'Create an RDF Vocabulary.',
+      'custom' => 1, 
+      'modified' => 1,        
+      'locked' => 0,
+      'has_title' => 0,
+      ),
+          
+  );
+
+
+  foreach ($neologism_entities as $node){
+    // Complete the node type definition by setting any defaults not explicitly
+    // declared above.
+    // http://api.drupal.org/api/function/node_type_set_defaults/7
+    $content_type = node_type_set_defaults($node);
+    
+    //  node_add_body_field($content_type, $label = 'Details'); // Create a field instead
+  
+    // Save the content type
+    node_type_save($content_type);
+  }
+
+
+  // Create all the fields we are adding to our content type.
+  // http://api.drupal.org/api/function/field_create_field/7
+  foreach (_neologism_installed_fields() as $field) {
+    //field_delete_field($field); // for installation errors during development
+    field_create_field($field);
+  }
+
+  // Create all the instances for our fields.
+  // http://api.drupal.org/api/function/field_create_instance/7
+  foreach (_neologism_installed_instances() as $instance) {
+    field_create_instance($instance);
+  }
+  
+
+}
+
+
+
+
+
+
+/**
+ * Return a structured array defining the fields created by this content type.
+ *
+ * This is packaged in a function so it can be used in both
+ * neologism_install() and neologism_uninstall().
+ */
+function _neologism_installed_fields() {
+  $t = get_t();
+  return array(  
+
+    'property_title' => array(
+      'field_name' => 'property_title',
+      'cardinality' => 1,
+      'type'        => 'text',
+      'settings'    => array(
+        'max_length' => 60,
+      ),
+    ),
+    'property_label' => array(
+      'field_name' => 'property_label',
+      'cardinality' => 1,
+      'type'        => 'text',
+      'settings'    => array(
+        'max_length' => 60,
+      ),
+    ),
+    'property_comment' => array(
+      'field_name'  => 'property_comment',
+      'cardinality' => 1,
+      'type'        => 'text_long',
+    ),
+    'property_details' => array(
+      'field_name' => 'property_details',
+      'type'       => 'text_with_summary',
+      'cardinality' => 1,
+    ),
+    'property_functional_property' => array(
+      'field_name' => 'property_functional_property',
+      'type' => 'list_boolean',
+      'settings' => array(
+        'allowed_values' => array(0 => 0, 1 => 'Functional Property'),
+        'allowed_values_function' => '',
+      ),
+      'cardinality' => 1,
+    ), 
+    'property_inv_func' => array(
+      'field_name' => 'property_inv_func',
+      'type' => 'list_boolean',
+      'settings' => array(
+        'allowed_values' => array(0 => 0, 1 => 'Inverse Functional Property'),
+        'allowed_values_function' => '',
+      ),   
+      'cardinality' => 1,
+    ),
+
+  
+    'class_title' => array(
+      'field_name' => 'class_title',
+      'cardinality' => 1,
+      'type'        => 'text',
+      'settings'    => array(
+        'max_length' => 60,
+      ),
+    ),
+    'class_label' => array(
+      'field_name' => 'class_label',
+      'cardinality' => 1,
+      'type'        => 'text',
+      'settings'    => array(
+        'max_length' => 60,
+      ),
+    ),
+    'class_comment' => array(
+      'field_name'  => 'class_comment',
+      'cardinality' => 1,
+      'type'        => 'text_long',
+    ),
+    'class_details' => array(
+      'field_name' => 'class_details',
+      'type'       => 'text_with_summary',
+      'cardinality' => 1,
+    ),
+    
+
+    
+    'vocabulary_id' => array(
+      'field_name' => 'vocabulary_id',
+      'cardinality' => 1,
+      'type'        => 'text',
+      'settings'    => array(
+        'max_length' => 60,
+        ), 
+      ),
+    'vocabulary_namespace_uri' => array(
+      'field_name' => 'vocabulary_namespace_uri',
+      'cardinality' => 1,
+      'type'        => 'list_text',
+      'settings'    => array(
+        'allowed_values' => array('0' => t('Default') . ': ' . url('<front>', array('absolute' => TRUE)) . '<span id="neologism-default-ns"><em>' . t('vocabulary-id') . '</em></span>#', '1'=> "Custom"),
+        'allowed_values_function' => '',
+      ),
+    ),
+    'vocabulary_title' => array(
+      'field_name'  => 'vocabulary_title',
+      'cardinality' => 1,
+      'type'        => 'text',
+      'settings'    => array(
+        'max_length' => 60,
+      ),
+    ),
+    'vocabulary_authors' => array(
+      'field_name' => 'vocabulary_authors',
+      'type'        => 'text',
+      'settings'    => array(
+        'max_length' => 60,
+      ),
+      'cardinality' => FIELD_CARDINALITY_UNLIMITED,
+    ),
+    'vocabulary_abstract' => array(
+      'field_name' => 'vocabulary_abstract',
+      'cardinality' => 1,
+      'type'        => 'text_long',
+    ),
+    'vocabulary_body' => array(
+      'field_name' => 'vocabulary_body',
+      'type'       => 'text_with_summary',
+      'cardinality' => 1,
+    ),
+    'vocabulary_additional_rdf' => array(
+      'field_name' => 'vocabulary_additional_rdf',
+      'type'       => 'text',
+      'cardinality' => 1,
+    ),
+
+  
+  );
+}
+
+
+
+
+
+
+/**
+ * Return a structured array defining the instances for this content type.
+ *
+ * The instance lets Drupal know which widget to use to allow the user to enter
+ * data and how to react in different view modes.  We are going to display a
+ * page that uses a custom "node_example_list" view mode.  We will set a
+ * cardinality of three allowing our content type to give the user three color
+ * fields.
+ *
+ * This is provided as a function so that it can be used in both hook_install()
+ * and hook_uninstall().
+ */
+function _neologism_installed_instances() {
+  $t = get_t();
+  return array(
+  
+    'property_title' => array(
+      'field_name' => 'property_title',
+      'label'       => $t('Property URI'),
+      'bundle' => 'property',
+      'entity_type' => 'node',
+      'required'    => TRUE,
+      'description' => $t('Only letters, numbers, dashes, and underscores. Should start with a lowercase letter and use CamelCase capitalization.'),
+      'widget'      => array(
+        'type'    => 'text_textfield',
+      ),
+    ),
+    'property_label' => array(
+      'field_name' => 'property_label',
+      'label'       => $t('Label'),
+      'bundle' => 'property',
+      'entity_type' => 'node',
+      'required'    => TRUE,
+      'description' => 'A human-readable name for the property.',
+      'widget'      => array(
+        'type'    => 'text_textfield',
+      ),
+    ),
+    'property_comment' => array(
+      'field_name'  => 'property_comment',
+      'label' => $t('Comment'),
+      'bundle' => 'property',
+      'entity_type' => 'node',
+      'description' => 'A plain text description of the property.',
+      'required'    => FALSE,
+      'widget'      => array(
+        'type'    => 'text_textarea',
+      ),
+    ),
+    'property_details' => array(
+      'field_name'  => 'property_details',
+      'label'       => $t('Details'),
+      'bundle' => 'property',
+      'entity_type' => 'node',
+      'description' => 'Will only show in HTML views.<br /><br /><br />',
+      'required'    => FALSE,
+      'widget' => array(
+        'type'    => 'text_textarea_with_summary',
+      ),
+    ),
+    'property_functional_property' => array(
+      'field_name'  => 'property_functional_property',
+      'label'       => $t('Functional Property '),
+      'bundle' => 'property',
+      'entity_type' => 'node',
+      'description' => 'Check this box, if your property is an FP, i.e. when you use this property in a statement, then the subject of the statement uniquely determines its object.',
+      'widget' => array(
+        'type' => 'options_onoff',
+      ),
+    ),    
+    'property_inv_func' => array(
+      'field_name'  => 'property_inv_func',
+      'label'       => $t('Inverse Functional Property '),
+      'bundle' => 'property',
+      'entity_type' => 'node',
+      'description' => 'Check this box, if your property is an IFP, i.e. the object of a statment that uses your property uniquely determines its subject.',
+      'widget' => array(
+        'type'    => 'options_onoff',
+      ),
+    ),
+
+    
+
+    'class_title' => array(
+      'field_name' => 'class_title',
+      'label'       => $t('Class URI'),
+      'bundle' => 'class',
+      'entity_type' => 'node',
+      'required'    => TRUE,
+      'description' => $t('Only letters, numbers, dashes, and underscores. Should start with an uppercase letter and use CamelCase capitalization'),
+      'widget'      => array(
+        'type'    => 'text_textfield',
+      ),
+    ),
+    'class_label' => array(
+      'field_name' => 'class_label',
+      'label'       => $t('Label'),
+      'bundle' => 'class',
+      'entity_type' => 'node',
+      'required'    => TRUE,
+      'description' => 'A human-readable name for the class.',
+      'widget'      => array(
+        'type'    => 'text_textfield',
+      ),
+    ),
+    'class_comment' => array(
+      'field_name'  => 'class_comment',
+      'label' => $t('Comment'),
+      'bundle' => 'class',
+      'entity_type' => 'node',
+      'description' => 'A plain text description of the class.',
+      'required'    => FALSE,
+      'widget'      => array(
+        'type'    => 'text_textarea',
+      ),
+    ),
+    'class_details' => array(
+      'field_name'  => 'class_details',
+      'label'       => $t('Details'),
+      'bundle' => 'class',
+      'entity_type' => 'node',
+      'description' => 'Will only show in HTML views.<br /><br /><br />',
+      'required'    => FALSE,
+      'widget' => array(
+        'type'    => 'text_textarea_with_summary',
+      ),
+    ),
+
+
+    'vocabulary_id' => array(
+      'field_name'  => 'vocabulary_id',
+      'default_value' => array(array('value' => url('<front>', array('absolute' => TRUE)) )),
+      'label' => $t('Vocabulary ID'),
+      'bundle' => 'vocabulary',
+      'entity_type' => 'node',
+      'description' => 'Will be used as the namespace prefix. Only lowercase letters, numbers, dashes. Max 10 characters.',
+      'required'    => TRUE,
+      'widget'      => array(
+        'type'    => 'text_textfield',
+        ),
+    ),
+    'vocabulary_namespace_uri' => array(
+      'field_name'  => 'vocabulary_namespace_uri',
+      'label'       => $t('Namespace URI'),
+      'bundle' => 'vocabulary',
+      'entity_type' => 'node',
+      'description' => 'URIs of classes and properties in the vocabulary will start with this.',
+      'required'    => TRUE,
+      'default_value' => array(array('value' => '0')),
+      'widget' => array(
+        'type'    => 'options_buttons',
+      ),
+    ),
+    'vocabulary_title' => array(
+      'field_name'  => 'vocabulary_title',
+      'label' => $t('Title'),
+      'bundle' => 'vocabulary',
+      'entity_type' => 'node',
+      'description' => 'A human-readable title for the vocabulary.',
+      'required'    => TRUE,
+      'widget'      => array(
+        'type'    => 'text_textfield',
+      ),
+    ),
+    'vocabulary_authors' => array(
+      'field_name'  => 'vocabulary_authors',
+      'label'       => $t(' Authors'),
+      'bundle' => 'vocabulary',
+      'entity_type' => 'node',
+      'description' => '',
+      'required'    => FALSE,
+      'widget' => array(
+        'type'    => 'text_textfield',
+      ),
+    ),
+    'vocabulary_abstract' => array(
+      'field_name'  => 'vocabulary_abstract',
+      'label' => $t('Abstract'),
+      'bundle' => 'vocabulary',
+      'entity_type' => 'node',
+      'description' => '',
+      'required'    => FALSE,
+      'widget'      => array(
+        'type'    => 'text_textarea',
+      ),
+    ),
+    'vocabulary_body' => array(
+      'field_name'  => 'vocabulary_body',
+      'label'       => $t('Body'),
+      'bundle' => 'vocabulary',
+      'entity_type' => 'node',
+      'description' => '',
+      'required'    => FALSE,
+      'widget' => array(
+        'type'    => 'text_textarea_with_summary',
+      ),
+    ),
+    'vocabulary_additional_rdf' => array(
+      'field_name'  => 'vocabulary_additional_rdf',
+      'label'       => $t('Additional Custom RDF'),
+      'bundle' => 'vocabulary',
+      'entity_type' => 'node',
+      'description' => $t('Additional RDF in Turtle syntax for inclusion in the vocabulary\'s RDF description.'),
+      'required'    => FALSE,
+      'widget' => array(
+        'type'    => 'text_textarea',
+      ),
+    ),
+
+    
+  );
+}
+
+
+
+
+/**
+ * Implements hook_uninstall().
+ *
+ */
+function neologism_uninstall() {  
+  
+  // Gather all the vocabulary content that might have been created while this
+  // module was enabled.
+  // http://api.drupal.org/api/function/db_query/7
+  $sql = 'SELECT nid FROM {node} n WHERE n.type = :type';
+  $result = db_query($sql, array(':type' => 'vocabulary'));
+  $nids = array();
+  foreach ($result as $row) {
+    $nids[] = $row->nid;
+  }
+  // Delete all the nodes at once
+  // http://api.drupal.org/api/function/node_delete_multiple/7
+  node_delete_multiple($nids);
+
+
+// Deleting all class content
+  $sql = 'SELECT nid FROM {node} n WHERE n.type = :type';
+  $result = db_query($sql, array(':type' => 'class'));
+  $nids = array();
+  foreach ($result as $row) {
+    $nids[] = $row->nid;
+  }
+  node_delete_multiple($nids);
+
+
+// Deleting all property content
+  $sql = 'SELECT nid FROM {node} n WHERE n.type = :type';
+  $result = db_query($sql, array(':type' => 'property'));
+  $nids = array();
+  foreach ($result as $row) {
+    $nids[] = $row->nid;
+  }
+  node_delete_multiple($nids);
+
+
+  // Loop over each of the fields defined by this module and delete
+  // all instances of the field, their data, and the field itself.
+  // http://api.drupal.org/api/function/field_delete_field/7
+  foreach (array_keys(_neologism_installed_fields()) as $field) {
+    field_delete_field($field);
+  }
+
+
+  // Loop over any remaining field instances attached to the content types
+  // content type (such as the body field) and delete them individually.
+  // http://api.drupal.org/api/function/field_delete_field/7
+//  Comment module shows a warning here in some cases
+  $instances = field_info_instances('node', 'property');
+  foreach ($instances as $instance_name => $instance) {
+    field_delete_instance($instance);
+  }
+  $instances = field_info_instances('node', 'class');
+  foreach ($instances as $instance_name => $instance) {
+    field_delete_instance($instance);
+  }
+  $instances = field_info_instances('node', 'vocabulary');
+  foreach ($instances as $instance_name => $instance) {
+    field_delete_instance($instance);
+  }
+
+
+  // Delete our content types
+  // http://api.drupal.org/api/function/node_type_delete/7
+  node_type_delete('property');
+  node_type_delete('class');
+  node_type_delete('vocabulary');
+  
+
+  // Purge all field infromation
+  // http://api.drupal.org/api/function/field_purge_batch/7
+  field_purge_batch(1000);
+  
+  // Delete menu entries for vocabulary
+    db_delete('menu_links')
+     ->condition('link_path', 'node/add/vocabulary')
+     ->execute();
+    db_delete('menu_router')
+     ->condition('path', 'node/add/vocabulary')
+     ->execute();
+
+  // Delete menu entries for class
+    db_delete('menu_links')
+     ->condition('link_path', 'node/add/class')
+     ->execute();
+    db_delete('menu_router')
+     ->condition('path', 'node/add/class')
+     ->execute();
+
+  // Delete menu entries for property
+    db_delete('menu_links')
+     ->condition('link_path', 'node/add/property')
+     ->execute();
+    db_delete('menu_router')
+     ->condition('path', 'node/add/property')
+     ->execute();
+  
+}
diff --git a/neologism.module b/neologism.module
new file mode 100644
index 0000000..ac6f3f6
--- /dev/null
+++ b/neologism.module
@@ -0,0 +1,10 @@
+<?php
+
+/**
+  * @file
+  * Allows users to create and publish RDF Schema vocabularies.
+  *
+  *
+  * */
+
+
