diff --git a/perm_example/perm_example.info b/perm_example/perm_example.info
new file mode 100644
index 0000000..7e7227f
--- /dev/null
+++ b/perm_example/perm_example.info
@@ -0,0 +1,4 @@
+name = Perm example
+description = Demonstrates how to use Drupal's perm API.
+core = 6.x
+package = Example modules
\ No newline at end of file
diff --git a/perm_example/perm_example.module b/perm_example/perm_example.module
new file mode 100644
index 0000000..71176d2
--- /dev/null
+++ b/perm_example/perm_example.module
@@ -0,0 +1,152 @@
+<?php
+
+/**
+ * @file
+ * Demonstrates use of the Perm API in Drupal - hook_perm()
+ */
+
+/**
+ * @defgroup perm_example Example: Perm API
+ * @ingroup examples
+ * @{
+ * Example using Perm API. (drupal 6)
+ *
+ * Demonstrates use of the Perm API in Drupal - hook_perm()
+ *
+ * This example is part of the Examples for Developers Project
+ * which you can download and experiment with here:
+ * http://drupal.org/project/examples
+ */
+
+/**
+ * Implements hook_help()
+ */
+function perm_example_help($path, $arg) {
+  switch ($path) {
+    case 'admin/help#perm_example':
+      $output = '<p>';
+      $output .=  t('This module demonstrates using hook_perm. You need the
+                    \'access perm_example\' permission to be
+                    able to see the restricted menu option.
+                    There is an unrestricted menu option that provides a link
+                    to the restricted menu option. There is also another menu
+                    option that has a custom user callback function that checks
+                    for \'access content\' and \'access comments\' permissions.
+                    ');
+      $output .= '</p>';
+      return $output;
+  }
+}
+
+/**
+ * Implements hook_perm()
+ * @see http://api.drupal.org/api/drupal/developer--hooks--core.php/function/hook_perm/6
+ */
+function perm_example_perm() {
+  // All you need to do to define different
+  // permissions for your module is to return
+  // an array of strings. Don't wrap your strings in t().
+  // The strings will appear under your module's group on the user
+  // permissions (admin/user/permissions) page.
+  // This example returns just one string.
+  return array('access perm_example');
+}
+
+/**
+ * Implements hook_menu()
+ */
+function perm_example_menu() {
+  // The purpose of this menu item is to give a free access
+  // page that points people to the restricted page
+  // By setting 'access callback' to TRUE, it makes the
+  // page available to everybody.
+  $items['perm_example/open'] = array(
+    'title' => 'Unrestricted permission example',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('perm_example_open_form'),
+    'access callback' => TRUE,
+  );
+  // The purpose of this menu item is to utilize the permission
+  // configured through hook_perm(). This is the real point
+  // of this module.
+  // Notice that the 'access arguments' are set to the same value
+  // as declared in hook_perm() above. However, you are not limited
+  // to permissions set by this module alone.
+  // Also, the default 'access callback' is user_access().
+  // But, you can create your own callback function
+  // [which should still call user_access().
+  // See the final menu item below.
+  $items['perm_example/restricted'] = array(
+    'title' => 'Restricted permission example',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('perm_example_restricted_form'),
+    'access arguments' => array('access perm_example'),
+  );
+  $items['perm_example/custom'] = array(
+    'title' => 'Custom permission example',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('perm_example_custom_form'),
+    'access callback' => perm_example_access_callback,
+  );
+  return $items;
+}
+
+/**
+ * The unrestricted permission form.
+ */
+function perm_example_open_form() {
+  $form['intro'] = array(
+    '#value' => t('Everybody is able to get to this page. However,
+                   the link below will attempt to take you to the
+                   restricted page. If you don\'t have permission
+                   to view the page, you will get an
+                   \'Access denied\' message.'),
+  );
+  $form['perm_trigger'] = array(
+    '#type' => 'item',
+    '#value' => l(t('Visit the restricted page.'), 'perm_example/restricted'),
+  );
+
+  return $form;
+}
+
+/**
+ * The restricted permission form.
+ */
+function perm_example_restricted_form() {
+  $form['intro'] = array(
+    '#value' => t('Congratulations! You have been granted access
+                   to the restricted page.'),
+  );
+  return $form;
+}
+
+/**
+ * The custom access callback function
+ * @see http://api.drupal.org/api/drupal/modules--user--user.module/function/user_access/6
+ */
+function perm_example_access_callback() {
+  // This is a silly example to illustrate the use of user_access().
+  // It isn't really necessary to use this function to accomplish what
+  // we are doing here.
+  // user.module does the following:
+  // return (($GLOBALS['user']->uid == $account->uid) ||
+  //            user_access('administer users'))
+  //        && $account->uid > 0;
+  return (user_access('access content') && user_access('access comments'));
+}
+
+/**
+ * The custom access callback form.
+ */
+function perm_example_custom_form() {
+  $form['intro'] = array(
+    '#value' => t('Congratulations! You have been granted access
+                   to the custom access callback page.'),
+  );
+  return $form;
+}
+
+/**
+ * @} End of "defgroup perm_example".
+ */
\ No newline at end of file
