diff --git a/Model/Datasource/CouchDBSource.php b/Model/Datasource/CouchDBSource.php
old mode 100644
new mode 100755
index 6e2a994..b05dc5e
--- a/Model/Datasource/CouchDBSource.php
+++ b/Model/Datasource/CouchDBSource.php
@@ -1,47 +1,30 @@
 <?php
 /**
- * CouchDB Datasource
- *
- * PHP version 5
+ * CouchDB layer for DBO.
  *
  * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
- * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
  *
  * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
  * Redistributions of files must retain the above copyright notice.
  *
- * @copyright     Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
  * @link          http://cakephp.org CakePHP(tm) Project
- * @package       datasources
- * @subpackage    datasources.models.datasources
- * @since         CakePHP Datasources v 0.3
- * @license       MIT License (http://www.opensource.org/licenses/mit-license.php)
+ * @package       CouchDB.Model.Datasource
+ * @since         CakePHP(tm) v 0.9
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
  */
+
 App::uses('HttpSocket', 'Network/Http');
-App::uses('DataSource', 'Model/Datasource');
 
 /**
- * CouchDB Datasource
+ * CouchDB Datasource.
  *
- * @package datasources
- * @subpackage datasources.models.datasources
+ * @package       CouchDB.Model.Datasource
  */
 class CouchDBSource extends DataSource {
 
-/**
- * Start quote
- *
- * @var string
- */
-	public $startQuote = null;
-
-/**
- * End quote
- *
- * @var string
- */
-	public $endQuote = null;
-
 /**
  * Constructor.
  *
@@ -75,6 +58,7 @@ public function reconnect($config = null) {
 		$this->disconnect();
 		$this->setConfig($config);
 		$this->_sources = null;
+
 		return $this->connect();
 	}
 
@@ -82,14 +66,17 @@ public function reconnect($config = null) {
  * Connects to the database. Options are specified in the $config instance variable.
  *
  * @return boolean Connected.
+ * @throws MissingConnectionException
  */
 	public function connect() {
 		if ($this->connected !== true) {
-			if (Set::check($this->config, 'login'))
+			if (Set::check($this->config, 'login')) {
 				$this->config = Set::insert($this->config, 'request.uri.user', Set::get($this->config, 'login'));
+			}
 
-			if (Set::check($this->config, 'password'))
+			if (Set::check($this->config, 'password')) {
 				$this->config = Set::insert($this->config, 'request.uri.pass', Set::get($this->config, 'password'));
+			}
 
 			try {
 				$this->Socket = new HttpSocket($this->config);
@@ -98,6 +85,7 @@ public function connect() {
 				throw new MissingConnectionException(array('class' => $e->getMessage()));
 			}
 		}
+
 		return $this->connected;
 	}
 
@@ -112,6 +100,7 @@ public function close() {
 		if (Configure::read('debug') > 1) {
 			//$this->showLog();
 		}
+
 		$this->disconnect();
 	}
 
@@ -124,31 +113,20 @@ public function disconnect() {
 		if (isset($this->results) && is_resource($this->results)) {
 			$this->results = null;
 		}
+
 		$this->connected = false;
+
 		return !$this->connected;
 	}
 
 /**
  * List of databases.
  *
+ * @param mixed $data
  * @return array Databases.
  */
-	public function listSources() {
-		$databases = $this->__decode($this->Socket->get($this->__uri('_all_dbs')), true);
-		return $databases;
-	}
-
-/**
- * Convenience method for DboSource::listSources().
- * Returns the names of databases in lowercase.
- *
- * @return array Lowercase databases.
- */
-	public function sources($reset = false) {
-		if ($reset === true) {
-			$this->_sources = null;
-		}
-		return array_map('strtolower', $this->listSources());
+	public function listSources($data = null) {
+		return $this->__decode($this->Socket->get($this->__uri('_all_dbs')), true);
 	}
 
 /**
@@ -171,14 +149,16 @@ public function describe($model) {
  * @param array $values An array with key values of the fields. If null, $model->data will be used to generate the field names.
  * @return boolean Success.
  */
-	public function create($model, $fields = null, $values = null) {
+	public function create(Model $model, $fields = null, $values = null) {
 		$data = $model->data;
+
 		if ($fields !== null && $values !== null) {
 			$data = array_combine($fields, $values);
 		}
 
 		if (isset($data[$model->primaryKey]) && !empty($data[$model->primaryKey])) {
 			$params = $data[$model->primaryKey];
+			unset($data[$model->primaryKey]);
 		} else {
 			$uuids = $this->__decode($this->Socket->get('/_uuids'));
 			$params = $uuids->uuids[0];
@@ -189,8 +169,10 @@ public function create($model, $fields = null, $values = null) {
 		if ($this->__checkOk($result)) {
 			$model->id = $result->id;
 			$model->rev = $result->rev;
+
 			return true;
 		}
+
 		return false;
 	}
 
@@ -202,7 +184,7 @@ public function create($model, $fields = null, $values = null) {
  * @param integer $recursive Level number of associations.
  * @return mixed False if an error occurred, otherwise an array of results.
  */
-	public function read($model, $queryData = array(), $recursive = null) {
+	public function read(Model $model, $queryData = array(), $recursive = null) {
 		if ($recursive === null && isset($queryData['recursive'])) {
 			$recursive = $queryData['recursive'];
 		}
@@ -215,9 +197,22 @@ public function read($model, $queryData = array(), $recursive = null) {
 
 		if (empty($queryData['conditions'])) {
 			$params = $params . '_all_docs?include_docs=true';
+
 			if (!empty($queryData['limit'])) {
 				$params = $params . '&limit=' . $queryData['limit'];
 			}
+
+			if (!empty($queryData['offset'])) {
+				$params .= '&skip=' . $queryData['offset'];
+			}
+
+			if (!empty($queryData['startkey_docid'])) {
+				$params .= '&startkey_docid=' . $queryData['startkey_docid'];
+			}
+
+			if (!empty($queryData['descending'])) {
+				$params .= '&descending=' . $queryData['descending'];
+			}
 		} else {
 			if (isset($queryData['conditions'][$model->alias . '.' . $model->primaryKey])) {
 				$params = $queryData['conditions'][$model->alias . '.' . $model->primaryKey];
@@ -228,10 +223,17 @@ public function read($model, $queryData = array(), $recursive = null) {
 			if ($model->recursive > -1) {
 				$params = $params . '?revs_info=true';
 			}
+			
+			if (isset($queryData['conditions'][$model->alias . '.rev'])) {
+				if (strstr($this->__uri($model, $params), '?rev')) $type = '&';
+				else $type = '?';
+				$params = $params . $type . 'rev=' . $queryData['conditions'][$model->alias . '.rev'];
+			}
 		}
 
 		$result = array();
 		$result[0][$model->alias] = $this->__decode($this->Socket->get($this->__uri($model, $params)), true);
+
 		return $this->__readResult($model, $queryData, $result);
 	}
 
@@ -252,28 +254,26 @@ private function __readResult($model, $queryData, $result) {
 			$result[0][$model->alias]['id'] = $result[0][$model->alias]['_id'];
 			$result[0][$model->alias]['rev'] = $result[0][$model->alias]['_rev'];
 
-			unset($result[0][$model->alias]['_id']);
-			unset($result[0][$model->alias]['_rev']);
+			unset($result[0][$model->alias]['_id'], $result[0][$model->alias]['_rev']);
 
 			return $result;
-		} else if (isset($result[0][$model->alias]['rows'])) {
+		} elseif (isset($result[0][$model->alias]['rows'])) {
 			$docs = array();
-			foreach ($result[0][$model->alias]['rows'] as $k => $doc) {
 
+			foreach ($result[0][$model->alias]['rows'] as $k => $doc) {
 				$docs[$k][$model->alias]['id'] = $doc['doc']['_id'];
 				$docs[$k][$model->alias]['rev'] = $doc['doc']['_rev'];
 
-				unset($doc['doc']['_id']);
-				unset($doc['doc']['_rev']);
-				unset($doc['doc']['id']);
-				unset($doc['doc']['rev']);
+				unset($doc['doc']['_id'], $doc['doc']['_rev'], $doc['doc']['id'], $doc['doc']['rev']);
 
 				foreach ($doc['doc'] as $field => $value) {
 					$docs[$k][$model->alias][$field] = $value;
 				}
 			}
+
 			return $docs;
 		}
+
 		return false;
 	}
 
@@ -286,8 +286,9 @@ private function __readResult($model, $queryData, $result) {
  * @param mixed $conditions
  * @return boolean Success.
  */
-	public function update($model, $fields = null, $values = null, $conditions = null) {
+	public function update(Model $model, $fields = null, $values = null, $conditions = null) {
 		$data = $model->data[$model->alias];
+
 		if ($fields !== null && $values !== null) {
 			$data = array_combine($fields, $values);
 		}
@@ -296,11 +297,14 @@ public function update($model, $fields = null, $values = null, $conditions = nul
 
 		if (!empty($model->id)) {
 			$result = $this->__decode($this->Socket->put($this->__uri($model, $model->id), $this->__encode($data)));
+
 			if ($this->__checkOk($result)) {
 				$model->rev = $result->rev;
+
 				return true;
 			}
 		}
+
 		return false;
 	}
 
@@ -320,7 +324,7 @@ private function __idRevData(&$model, &$data) {
 		if (isset($data['rev']) && !empty($data['rev'])) {
 			$data['_rev'] = $data['rev'];
 			unset($data['rev']);
-		} else if ($model->rev) {
+		} elseif ($model->rev) {
 			$data['_rev'] = $model->rev;
 		} else {
 			$data['_rev'] = $this->__lastRevision($model, $model->id);
@@ -336,6 +340,7 @@ private function __idRevData(&$model, &$data) {
  */
 	private function __lastRevision(&$model, $id) {
 		$result = $this->__decode($this->Socket->get($this->__uri($model, $id)));
+
 		return $result->_rev;
 	}
 
@@ -346,16 +351,21 @@ private function __lastRevision(&$model, $id) {
  * @param mixed $conditions
  * @return boolean Success.
  */
-	public function delete($model, $conditions = null) {
+	public function delete(Model $model, $conditions = null) {
 		$id = $model->id;
 		$rev = $model->rev;
 
 		if (!empty($id)) {
-			if (empty($rev)) $rev = $this->__lastRevision($model, $id);
-			$id_rev = $id . '/?rev=' . $rev;
-			$result = $this->__decode($this->Socket->delete($this->__uri($model, $id_rev)));
+			if (empty($rev)) {
+				$rev = $this->__lastRevision($model, $id);
+			}
+
+			$idRev = $id . '/?rev=' . $rev;
+			$result = $this->__decode($this->Socket->delete($this->__uri($model, $idRev)));
+
 			return $this->__checkOk($result);
 		}
+
 		return false;
 	}
 
@@ -382,6 +392,7 @@ public function expression($expression) {
 		$obj = new stdClass();
 		$obj->type = 'expression';
 		$obj->value = $expression;
+
 		return $obj;
 	}
 
@@ -390,10 +401,12 @@ public function expression($expression) {
  *
  * @param mixed $model
  * @param boolean $quote
+ * @param boolean $schema
  * @return string Full name of table.
  */
-	public function fullTableName($model = null, $quote = true) {
+	public function fullTableName($model, $quote = true, $schema = true) {
 		$table = null;
+
 		if (is_object($model)) {
 			$table = $model->tablePrefix . $model->table;
 		} elseif (isset($this->config['prefix'])) {
@@ -401,6 +414,7 @@ public function fullTableName($model = null, $quote = true) {
 		} else {
 			$table = strval($model);
 		}
+
 		return $table;
 	}
 
@@ -413,7 +427,7 @@ public function fullTableName($model = null, $quote = true) {
  *
  * The method can be performed by a Model of the following ways:
  *
- * 		$this->Model->curlGet('_all_dbs');
+ *    $this->Model->curlGet('_all_dbs');
  *		$this->Model->curlPut('document_name');
  *		$this->Model->curlPost('document_name', array('field' => 'value'));
  *		$this->Model->curlDelete('document_name');
@@ -421,7 +435,7 @@ public function fullTableName($model = null, $quote = true) {
  *		$this->Model->curlPost('document_name', array('field' => 'value'), true , false);
  *
  * @param string $method
- * @param array $params ParĂ¢metros aceitos na ordem: uri, data, decode, assoc
+ * @param array $params Accepted parameters in order: uri, data, decode, assoc
  * @return object
  */
 	public function query($method, $params) {
@@ -431,11 +445,13 @@ public function query($method, $params) {
 			'method' => strtoupper(str_replace('curl', '', $method))
 		);
 
-		if (!empty($uri))
+		if (!empty($uri)) {
 			$request['uri'] = '/' . $uri;
+		}
 
-		if (!empty($data))
+		if (!empty($data)) {
 			$request['body'] = $this->__encode($data);
+		}
 
 		$result = $this->Socket->request($request);
 
@@ -453,17 +469,29 @@ public function query($method, $params) {
  * @return array
  */
 	private function __queryParams($params) {
-		if (isset($params[0])) $uri = $params[0];
-		else $uri = '';
+		if (isset($params[0])) {
+			$uri = $params[0];
+		} else {
+			$uri = '';
+		}
 
-		if (isset($params[1])) $data = $params[1];
-		else $data = array();
+		if (isset($params[1])) {
+			$data = $params[1];
+		} else {
+			$data = array();
+		}
 
-		if (isset($params[2])) $decode = $params[2];
-		else $decode = true;
+		if (isset($params[2])) {
+			$decode = $params[2];
+		} else {
+			$decode = true;
+		}
 
-		if (isset($params[3])) $assoc = $params[3];
-		else $assoc = true;
+		if (isset($params[3])) {
+			$assoc = $params[3];
+		} else {
+			$assoc = true;
+		}
 
 		return array($uri, $data, $decode, $assoc);
 	}
@@ -479,6 +507,7 @@ private function __uri($model = null, $params = null) {
 		if (!is_null($params)) {
 			$params = '/' . $params;
 		}
+
 		return '/' . $this->fullTableName($model) . $params;
 	}
 
@@ -513,4 +542,3 @@ private function __checkOk($object = null) {
 		return isset($object->ok) && $object->ok === true;
 	}
 }
-?>
\ No newline at end of file
diff --git a/README.md b/README.md
index 3d1bed5..1f047eb 100644
--- a/README.md
+++ b/README.md
@@ -1,36 +1,79 @@
 # CouchDB datasource plugin for CakePHP
 
+CouchDB datasource is a way to facilitate the communication from CakePHP application to CouchDB database.
+
 DataSources are the link between models and the source of data that models represent. 
 
 CouchDB is an open source document-oriented database written mostly in the Erlang programming language. 
 
 ### Version
 
-Written for CakePHP 2.1+
+Written for CakePHP 2.x
+
+### Copyright
+
+Copyright (c) 2011 Maury M. Marques
 
+## Installation
 
-### Installation
+You can install this plugin using Composer, GIT Submodule, GIT Clone or Manually
 
-You can clone the plugin into your project (or if you want you can use as a [submodule](http://help.github.com/submodules)):
+_[Using [Composer](http://getcomposer.org/)]_
 
+Add the plugin to your project's `composer.json` - something like this:
+
+```javascript
+{
+  "require": {
+    "maurymmarques/couchdb-datasource-plugin": "dev-master"
+  },
+  "extra": {
+    "installer-paths": {
+      "app/Plugin/CouchDB": ["maurymmarques/couchdb-datasource-plugin"]
+    }
+  }
+}
 ```
-cd path/to/app/Plugin or /plugins
+Then just run `composer install`
+
+Because this plugin has the type `cakephp-plugin` set in it's own `composer.json`, composer knows to install it inside your `/Plugin` directory, rather than in the usual vendors file.
+
+_[GIT Submodule]_
+
+In your app directory (`app/Plugin`) type:
+
+```bash
+git submodule add git://github.com/maurymmarques/couchdb-datasource.git Plugin/CouchDB
+git submodule init
+git submodule update
+```
+
+_[GIT Clone]_
+
+In your plugin directory (`app/Plugin` or `plugins`) type:
+
+```bash
 git clone https://github.com/maurymmarques/couchdb-datasource.git CouchDB
 ```
 
+_[Manual]_
+
+* Download the [CouchDB archive](https://github.com/maurymmarques/couchdb-datasource/archive/master.zip).
+* Unzip that download.
+* Rename the resulting folder to `CouchDB`
+* Then copy this folder into `app/Plugin/` or `plugins`
+
+## Configuration
+
 Bootstrap the plugin in app/Config/bootstrap.php:
 
 ```php
-<?php
 CakePlugin::load('CouchDB');
 ```
 
-### Configuration
-
 Connection in app/Config/database.php:
 
 ```php
-<?php
 class DATABASE_CONFIG {
 
 	public $default = array(
@@ -51,10 +94,32 @@ class DATABASE_CONFIG {
 
 The datasource works basically like CakePHP
 
+### Creating a model
+
+```php
+class Post extends AppModel {
+
+	public $schema = array(
+		'title' => array(
+			'type' => 'string',
+			'null' => true,
+			'key' => 'primary',
+			'length' => 32
+		)
+	);
+
+}
+```
+
+You can set another CouchDB database name in your model using the attribute `Model::useTable`
+
+```php
+public $useTable = 'posts';
+```
+
 ### Saving a document
 
 ```php
-<?php
 $data = array('title' => 'My new title');
 $this->Post->save($data);
 
@@ -68,15 +133,20 @@ $this->Post->rev;
 ### Search for a document
 
 ```php
-<?php
 $conditions = array('Post.id' => $this->Post->id);
 $result = $this->Post->find('first', compact('conditions'));
 ```
 
+### Search for a document by specific revision
+
+```php
+$conditions = array('Post.id' => $this->Post->id, 'Post.rev' => $this->Post->rev);
+$result = $this->Post->find('first', compact('conditions'));
+```
+
 ### Change a document (changing the last revision)
 
 ```php
-<?php
 $data = array('title' => 'My new title');
 $this->Post->id = '8e64f1eadab2b3b32c94ef2scf3094420';
 $this->Post->save($data);
@@ -85,7 +155,6 @@ $this->Post->save($data);
 ### Change a document to a particular revision
 
 ```php
-<?php
 $data = array('title' => 'My new title');
 $this->Post->id = '8e64f1eadab2b3b32c94ef2scf3094420';
 $this->Post->rev = '26-5cd5713759905feeee9b384edc4cfb61';
@@ -95,7 +164,6 @@ $this->Post->save($data);
 ### Deleting a document
 
 ```php
-<?php
 $this->Post->id = '8e64f1eadab2b3b32c94ef2scf3094420';
 $this->Post->delete($data);
 ```
@@ -105,7 +173,6 @@ $this->Post->delete($data);
 You can use the methods: curlGet, curlPost, curlPut, curlDelete
 
 ```php
-<?php
 $post = array(
 	'source' => 'post',
 	'target' => 'post-replicate',
diff --git a/Test/Case/Datasource/CouchDBSourceTest.php b/Test/Case/Datasource/CouchDBSourceTest.php
old mode 100644
new mode 100755
index 3424cad..097f74a
--- a/Test/Case/Datasource/CouchDBSourceTest.php
+++ b/Test/Case/Datasource/CouchDBSourceTest.php
@@ -1,37 +1,54 @@
 <?php
 /**
- * CouchDB DataSource Test file
- * PHP version 5
+ * CouchDB DataSource Test file.
  *
  * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
- * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
  *
  * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
  * Redistributions of files must retain the above copyright notice.
  *
- * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
- * @link http://cakephp.org CakePHP(tm) Project
- * @package datasources
- * @subpackage datasources.models.datasources
- * @since CakePHP Datasources v 0.3
- * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @package       CouchDB.Test.Case.Datasource
+ * @since         CakePHP Datasources v 0.3
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
  */
 
 App::uses('AppModel', 'Model');
 
 /**
- * Post Model for the test
- *
- * @package app
- * @subpackage app.model.post
+ * Post Model for the test.
  */
 class Post extends AppModel {
 
+/**
+ * Name of the model.
+ *
+ * @var string
+ */
 	public $name = 'Post';
-	public $useDbConfig = 'couchdb_test';
+
+/**
+ * Custom display field name.
+ *
+ * @var string
+ */
 	public $displayField = 'title';
+
+/**
+ * Number of associations to recurse through during find calls.
+ *
+ * @var integer
+ */
 	public $recursive = -1;
 
+/**
+ * List of validation rules.
+ *
+ * @var array
+ */
 	public $validate = array(
 		'title' => array(
 			'notempty' => array(
@@ -45,6 +62,11 @@ class Post extends AppModel {
 		),
 	);
 
+/**
+ * Field-by-field table metadata.
+ *
+ * @var array
+ */
 	public $schema = array(
 		'id' => array(
 			'type' => 'string',
@@ -71,73 +93,73 @@ class Post extends AppModel {
 }
 
 /**
- * CouchDBTestCase
+ * CouchDBTestCase.
  *
- * @package       datasources
- * @subpackage    datasources.tests.cases.models.datasources
+ * @package       CouchDB.Test.Case.Datasource
  */
 class CouchDBTestCase extends CakeTestCase {
 
 /**
- * CouchDB Datasource object
+ * CouchDB Datasource object.
  *
  * @var object
  */
 	public $CouchDB = null;
 
 /**
- * Configuration
+ * Configuration.
  *
  * @var array
  */
-	protected $config = array(
-		'datasource' 	=> 'CouchDB.CouchDBSource',
-		'persistent' 	=> false,
-		'host'		 	=> 'localhost',
-		'port' 	  	 	=> '5984',
-		'login' 	 	=> 'root',
-		'password'   	=> 'root',
-		'database'   	=> null,
-		'prefix'		=> ''
+	protected $_config = array(
+		'datasource' => 'CouchDB.CouchDBSource',
+		'persistent' => false,
+		'host' => 'localhost',
+		'port' => '5984',
+		'login' => 'root',
+		'password' => '',
+		'database' => null,
+		'prefix' => '',
 	);
 
 /**
- * Start Test
+ * Start Test.
  *
  * @return void
  */
-	public function startTest() {
+	public function setUp() {
 		config('database');
 		$config = new DATABASE_CONFIG();
 
 		if (isset($config->couchdb_test)) {
-			$this->config = $config->couchdb_test;
+			$this->_config = $config->couchdb_test;
 		}
 
-		ConnectionManager::create('couchdb_test', $this->config);
+		ConnectionManager::create('couchdb_test', $this->_config);
 
 		$this->Post = ClassRegistry::init('Post');
-		$this->removeAllDocuments();
+		$this->Post->useDbConfig = 'couchdb_test';
+		$this->__removeAllDocuments();
 	}
 
 /**
- * testConnection
+ * Test connection.
  *
  * @return void
  */
 	public function testConnection() {
-		$this->CouchDB = new CouchDBSource($this->config);
-		$this->CouchDB =& ConnectionManager::getDataSource($this->Post->useDbConfig);
+		$this->CouchDB = new CouchDBSource($this->_config);
+		$this->CouchDB = ConnectionManager::getDataSource($this->Post->useDbConfig);
 
-		$reconnect = $this->CouchDB->reconnect($this->config);
-		$this->assertIdentical($reconnect, true, __d('test_cases', 'Not reconnected'));
+		$reconnect = $this->CouchDB->reconnect($this->_config);
+		$this->assertSame($reconnect, true, __d('test_cases', 'Not reconnected'));
 
 		$disconnect = $this->CouchDB->disconnect();
-		$this->assertIdentical($disconnect, true, __d('test_cases', 'Not disconnect'));
+		$this->assertSame($disconnect, true, __d('test_cases', 'Not disconnect'));
 	}
 
 /**
- * testFind
+ * Test find.
  *
  * @return void
  */
@@ -149,20 +171,19 @@ public function testFind() {
 		$this->Post->save($data);
 
 		$result = $this->Post->find('all');
-		$this->assertEqual(1, count($result));
+		$this->assertEquals(1, count($result));
 
 		$resultData = $result[0]['Post'];
-		$this->assertEqual(4, count($resultData));
+		$this->assertEquals(4, count($resultData));
 		$this->assertTrue(!empty($resultData['id']));
-		$this->assertEqual($this->Post->id, $resultData['id']);
-		$this->assertEqual($this->Post->rev, $resultData['rev']);
-		$this->assertEqual($data['title'], $resultData['title']);
-		$this->assertEqual($data['description'], $resultData['description']);
+		$this->assertEquals($this->Post->id, $resultData['id']);
+		$this->assertEquals($this->Post->rev, $resultData['rev']);
+		$this->assertEquals($data['title'], $resultData['title']);
+		$this->assertEquals($data['description'], $resultData['description']);
 	}
 
-
 /**
- * testFindConditions
+ * Test find conditions.
  *
  * @return void
  */
@@ -177,17 +198,17 @@ public function testFindConditions() {
 		$this->Post->save($data);
 
 		$result = $this->Post->find('all');
-		$this->assertEqual(2, count($result));
+		$this->assertEquals(2, count($result));
 
 		$result = $this->Post->find('all', array('conditions' => array('Post.id' => $this->Post->id)));
-		$this->assertEqual(1, count($result));
+		$this->assertEquals(1, count($result));
 
 		$result = $this->Post->find('all', array('conditions' => array('id' => $this->Post->id)));
-		$this->assertEqual(1, count($result));
+		$this->assertEquals(1, count($result));
 	}
 
 /**
- * testFindRevs
+ * Test find revs.
  *
  * @return void
  */
@@ -201,7 +222,7 @@ public function testFindRevs() {
 
 		$this->Post->recursive = 0;
 		$result = $this->Post->find('all', array('conditions' => array('id' => $this->Post->id)));
-		$this->assertEqual(2, count($result[0]['Post']['_revs_info']));
+		$this->assertEquals(2, count($result[0]['Post']['_revs_info']));
 	}
 
 /**
@@ -217,18 +238,18 @@ public function testSave() {
 
 		$this->Post->create();
 		$saveResult = $this->Post->save($data);
-		$this->assertIdentical(is_array($saveResult), true);
+		$this->assertSame(is_array($saveResult), true);
 
 		$result = $this->Post->find('all');
-		$this->assertEqual(1, count($result));
+		$this->assertEquals(1, count($result));
 
 		$resultData = $result[0]['Post'];
-		$this->assertEqual(4, count($resultData));
+		$this->assertEquals(4, count($resultData));
 		$this->assertTrue(!empty($resultData['id']));
-		$this->assertEqual($this->Post->id, $resultData['id']);
-		$this->assertEqual($this->Post->rev, $resultData['rev']);
-		$this->assertEqual($data['title'], $resultData['title']);
-		$this->assertEqual($data['description'], $resultData['description']);
+		$this->assertEquals($this->Post->id, $resultData['id']);
+		$this->assertEquals($this->Post->rev, $resultData['rev']);
+		$this->assertEquals($data['title'], $resultData['title']);
+		$this->assertEquals($data['description'], $resultData['description']);
 	}
 
 /**
@@ -245,19 +266,19 @@ public function testSaveWithId() {
 
 		$this->Post->create();
 		$saveResult = $this->Post->save($data);
-		$this->assertIdentical(is_array($saveResult), true);
+		$this->assertSame(is_array($saveResult), true);
 
 		$result = $this->Post->find('all');
-		$this->assertEqual(1, count($result));
+		$this->assertEquals(1, count($result));
 
 		$resultData = $result[0]['Post'];
-		$this->assertEqual(4, count($resultData));
+		$this->assertEquals(4, count($resultData));
 		$this->assertTrue(!empty($resultData['id']));
-		$this->assertEqual($resultData['id'], $data['id']);
-		$this->assertEqual($this->Post->id, $resultData['id']);
-		$this->assertEqual($this->Post->rev, $resultData['rev']);
-		$this->assertEqual($data['title'], $resultData['title']);
-		$this->assertEqual($data['description'], $resultData['description']);
+		$this->assertEquals($resultData['id'], $data['id']);
+		$this->assertEquals($this->Post->id, $resultData['id']);
+		$this->assertEquals($this->Post->rev, $resultData['rev']);
+		$this->assertEquals($data['title'], $resultData['title']);
+		$this->assertEquals($data['description'], $resultData['description']);
 	}
 
 /**
@@ -280,19 +301,19 @@ public function testSaveAll() {
 		$saveResult = $this->Post->saveAll($data);
 
 		$result = $this->Post->find('all');
-		$this->assertEqual(2, count($result));
+		$this->assertEquals(2, count($result));
 
 		$resultData = $result[0]['Post'];
-		$this->assertEqual(4, count($resultData));
+		$this->assertEquals(4, count($resultData));
 		$this->assertTrue(!empty($resultData['id']));
-		$this->assertEqual($data[0]['Post']['title'], $resultData['title']);
-		$this->assertEqual($data[0]['Post']['description'], $resultData['description']);
+		$this->assertEquals($data[0]['Post']['title'], $resultData['title']);
+		$this->assertEquals($data[0]['Post']['description'], $resultData['description']);
 
 		$resultData = $result[1]['Post'];
-		$this->assertEqual(4, count($resultData));
+		$this->assertEquals(4, count($resultData));
 		$this->assertTrue(!empty($resultData['id']));
-		$this->assertEqual($data[1]['Post']['title'], $resultData['title']);
-		$this->assertEqual($data[1]['Post']['description'], $resultData['description']);
+		$this->assertEquals($data[1]['Post']['title'], $resultData['title']);
+		$this->assertEquals($data[1]['Post']['description'], $resultData['description']);
 	}
 
 /**
@@ -309,27 +330,30 @@ public function updateTest() {
 		);
 
 		$mapReduce = $this->Post->query($uri, $post);
-		if(isset($mapReduce->rows[0]->value)) $count0 = $mapReduce->rows[0]->value;
-		else $count0 = 0;
 
-		$count1 = $this->updateTest1($uri, $post, $count0);
-		$count2 = $this->updateTest2($uri, $post, $count1);
-		$count3 = $this->updateTest3($uri, $post, $count2);
-		$count4 = $this->updateTest4($uri, $post, $count2);
-		$updateData = $this->updateTest5($uri, $post, $count4);
+		if (isset($mapReduce->rows[0]->value)) {
+			$count0 = $mapReduce->rows[0]->value;
+		} else {
+			$count0 = 0;
+		}
+
+		$count1 = $this->__updateTest1($uri, $post, $count0);
+		$count2 = $this->__updateTest2($uri, $post, $count1);
+		$count3 = $this->__updateTest3($uri, $post, $count2);
+		$count4 = $this->__updateTest4($uri, $post, $count2);
+		$updateData = $this->__updateTest5($uri, $post, $count4);
 
 		// Final test
 		$result = $this->Post->find('all');
-		$this->assertEqual(1, count($result));
+		$this->assertEquals(1, count($result));
 
 		$resultData = $result[0]['Post'];
-		$this->assertEqual(4, count($resultData));
+		$this->assertEquals(4, count($resultData));
 		$this->assertTrue(!empty($resultData['id']));
-		$this->assertEqual($this->Post->id, $resultData['id']);
-		$this->assertEqual($this->Post->rev, $resultData['rev']);
-		$this->assertNotEqual($updateData['title'], $resultData['title']);
-		$this->assertNotEqual($updateData['description'], $resultData['description']);
-
+		$this->assertEquals($this->Post->id, $resultData['id']);
+		$this->assertEquals($this->Post->rev, $resultData['rev']);
+		$this->assertNotEquals($updateData['title'], $resultData['title']);
+		$this->assertNotEquals($updateData['description'], $resultData['description']);
 	}
 
 /**
@@ -337,10 +361,10 @@ public function updateTest() {
  *
  * @param string $uri
  * @param array $post
- * @param interger $previousCount
- * @return void
+ * @param integer $previousCount
+ * @return integer
  */
-	private function updateTest1($uri, $post, $previousCount) {
+	private function __updateTest1($uri, $post, $previousCount) {
 		$data = array(
 			'title' => 'My first post',
 			'description' => 'My first post'
@@ -348,13 +372,13 @@ private function updateTest1($uri, $post, $previousCount) {
 
 		$this->Post->create();
 		$saveResult = $this->Post->save($data);
-		$this->assertIdentical(is_array($saveResult), true);
-		$this->assertIdentical(!empty($this->Post->id), true);
+		$this->assertSame(is_array($saveResult), true);
+		$this->assertSame(!empty($this->Post->id), true);
 
 		$mapReduce = $this->Post->curlPost($uri, $post);
 		$count1 = $mapReduce['rows'][0]['value'];
 
-		$this->assertIdentical($count1 - $previousCount, 1);
+		$this->assertSame($count1 - $previousCount, 1);
 
 		return $count1;
 	}
@@ -364,12 +388,12 @@ private function updateTest1($uri, $post, $previousCount) {
  *
  * @param string $uri
  * @param array $post
- * @param interger $previousCount
- * @return void
+ * @param integer $previousCount
+ * @return integer
  */
-	private function updateTest2($uri, $post, $previousCount) {
+	private function __updateTest2($uri, $post, $previousCount) {
 		$findResult = $this->Post->find('first');
-		$this->assertEqual(4, count($findResult['Post']));
+		$this->assertEquals(4, count($findResult['Post']));
 
 		$updateData = array(
 			'title' => 'My post update',
@@ -379,12 +403,12 @@ private function updateTest2($uri, $post, $previousCount) {
 		$this->Post->id = $findResult['Post']['id'];
 		$this->Post->rev = $findResult['Post']['rev'];
 		$saveResult = $this->Post->save($updateData);
-		$this->assertIdentical(is_array($saveResult), true);
+		$this->assertSame(is_array($saveResult), true);
 
 		$mapReduce = $this->Post->curlPost($uri, $post);
 		$count2 = $mapReduce['rows'][0]['value'];
 
-		$this->assertIdentical($count2 - $previousCount, 0);
+		$this->assertSame($count2 - $previousCount, 0);
 
 		return $count2;
 	}
@@ -394,12 +418,12 @@ private function updateTest2($uri, $post, $previousCount) {
  *
  * @param string $uri
  * @param array $post
- * @param interger $previousCount
- * @return void
+ * @param integer $previousCount
+ * @return integer
  */
-	private function updateTest3($uri, $post, $previousCount) {
+	private function __updateTest3($uri, $post, $previousCount) {
 		$findResult = $this->Post->find('first');
-		$this->assertEqual(4, count($findResult['Post']));
+		$this->assertEquals(4, count($findResult['Post']));
 
 		$updateData = array(
 			'id' => $findResult['Post']['id'],
@@ -409,13 +433,13 @@ private function updateTest3($uri, $post, $previousCount) {
 
 		$this->Post->rev = $findResult['Post']['rev'];
 		$saveResult = $this->Post->save($updateData);
-		$this->assertIdentical(is_array($saveResult), true);
-		$this->assertIdentical($this->Post->id, $findResult['Post']['id']);
+		$this->assertSame(is_array($saveResult), true);
+		$this->assertSame($this->Post->id, $findResult['Post']['id']);
 
 		$mapReduce = $this->Post->curlPost($uri, $post);
 		$count3 = $mapReduce['rows'][0]['value'];
 
-		$this->assertIdentical($count3 - $previousCount, 0);
+		$this->assertSame($count3 - $previousCount, 0);
 
 		return $count3;
 	}
@@ -425,12 +449,12 @@ private function updateTest3($uri, $post, $previousCount) {
  *
  * @param string $uri
  * @param array $post
- * @param interger $previousCount
- * @return void
+ * @param integer $previousCount
+ * @return integer
  */
-	private function updateTest4($uri, $post, $previousCount) {
+	private function __updateTest4($uri, $post, $previousCount) {
 		$findResult = $this->Post->find('first');
-		$this->assertEqual(4, count($findResult['Post']));
+		$this->assertEquals(4, count($findResult['Post']));
 
 		$updateData = array(
 			'id' => $findResult['Post']['id'],
@@ -440,13 +464,13 @@ private function updateTest4($uri, $post, $previousCount) {
 		);
 
 		$saveResult = $this->Post->save($updateData);
-		$this->assertIdentical(is_array($saveResult), true);
-		$this->assertIdentical($this->Post->id, $findResult['Post']['id']);
+		$this->assertSame(is_array($saveResult), true);
+		$this->assertSame($this->Post->id, $findResult['Post']['id']);
 
 		$mapReduce = $this->Post->curlPost($uri, $post);
 		$count4 = $mapReduce['rows'][0]['value'];
 
-		$this->assertIdentical($count4 - $previousCount, 0);
+		$this->assertSame($count4 - $previousCount, 0);
 
 		return $count4;
 	}
@@ -456,12 +480,12 @@ private function updateTest4($uri, $post, $previousCount) {
  *
  * @param string $uri
  * @param array $post
- * @param interger $previousCount
- * @return void
+ * @param integer $previousCount
+ * @return integer
  */
-	private function updateTest5($uri, $post, $previousCount) {
+	private function __updateTest5($uri, $post, $previousCount) {
 		$findResult = $this->Post->find('first');
-		$this->assertEqual(4, count($findResult['Post']));
+		$this->assertEquals(4, count($findResult['Post']));
 
 		$updateData = array(
 			'id' => $findResult['Post']['id'],
@@ -472,18 +496,18 @@ private function updateTest5($uri, $post, $previousCount) {
 
 		$saveResult = $this->Post->save($updateData);
 		$this->assertFalse($saveResult);
-		$this->assertIdentical($this->Post->id, $findResult['Post']['id']);
+		$this->assertSame($this->Post->id, $findResult['Post']['id']);
 
 		$mapReduce = $this->Post->curlPost($uri, $post);
 		$count5 = $mapReduce['rows'][0]['value'];
 
-		$this->assertIdentical($count5 - $previousCount, 0);
+		$this->assertSame($count5 - $previousCount, 0);
 
-		return $updateData;
+		return $count5;
 	}
 
 /**
- * Test update without revision
+ * Test update without revision.
  *
  * @return void
  */
@@ -503,8 +527,8 @@ public function testUpdateWithoutRevision() {
 
 		$updateResult = $this->Post->save($result);
 
-		$this->assertIdentical(is_array($updateResult), true);
-		$this->assertIdentical($this->Post->id, $saveResult['Post']['id']);
+		$this->assertSame(is_array($updateResult), true);
+		$this->assertSame($this->Post->id, $saveResult['Post']['id']);
 	}
 
 /**
@@ -522,18 +546,18 @@ public function testDelete() {
 		$saveResult = $this->Post->save($data);
 
 		$result = $this->Post->find('all');
-		$this->assertEqual(1, count($result));
+		$this->assertEquals(1, count($result));
 
 		$this->Post->id = $result[0]['Post']['id'];
 		$this->Post->rev = $result[0]['Post']['rev'];
 		$this->Post->delete();
 
 		$result = $this->Post->find('all');
-		$this->assertEqual(0, count($result));
+		$this->assertEquals(0, count($result));
 	}
 
 /**
- * Test delete without revision
+ * Test delete without revision.
  *
  * @return void
  */
@@ -547,7 +571,7 @@ public function testDeleteWithoutRevision() {
 		$saveResult = $this->Post->save($data);
 
 		$result = $this->Post->find('all');
-		$this->assertEqual(1, count($result));
+		$this->assertEquals(1, count($result));
 
 		unset($result['Post']['rev']);
 		unset($this->Post->rev);
@@ -555,7 +579,7 @@ public function testDeleteWithoutRevision() {
 		$this->Post->delete();
 
 		$result = $this->Post->find('all');
-		$this->assertEqual(0, count($result));
+		$this->assertEquals(0, count($result));
 	}
 
 /**
@@ -566,7 +590,7 @@ public function testDeleteWithoutRevision() {
 	public function testQuery() {
 		// GET
 		$result = $this->Post->curlGet('_all_dbs');
-		$this->assertIdentical(is_array($result), true);
+		$this->assertSame(is_array($result), true);
 
 		// POST
 		$data = array(
@@ -574,8 +598,8 @@ public function testQuery() {
 			'description' => 'My first post'
 		);
 
-		$result = $this->Post->curlPost('/posts',  $data);
-		$this->assertIdentical($result['ok'], true);
+		$result = $this->Post->curlPost('/posts', $data);
+		$this->assertSame($result['ok'], true);
 
 		// PUT
 		$data = array(
@@ -584,22 +608,23 @@ public function testQuery() {
 			'description' => 'My first update'
 		);
 
-		$result = $this->Post->curlPut('/posts/' . $result['id'],  $data);
-		$this->assertIdentical($result['ok'], true);
+		$result = $this->Post->curlPut('/posts/' . $result['id'], $data);
+		$this->assertSame($result['ok'], true);
 
 		// DELETE
 		$result = $this->Post->curlDelete('/posts/' . $result['id'] . '/?rev=' . $result['rev']);
-		$this->assertIdentical($result['ok'], true);
+		$this->assertSame($result['ok'], true);
 	}
 
 /**
- * Remove all documents from database
+ * Remove all documents from database.
  *
  * @return void
  */
-	private function removeAllDocuments() {
+	private function __removeAllDocuments() {
 		$posts = $this->Post->find('list', array('fields' => array('Post.rev')));
-		foreach($posts as $id => $post) {
+
+		foreach ($posts as $id => $post) {
 			$this->Post->rev = $post;
 			$this->Post->delete($id);
 		}
@@ -610,8 +635,8 @@ private function removeAllDocuments() {
  *
  * @return void
  */
-	public function endTest() {
-		$this->removeAllDocuments();
+	public function tearDown() {
+		$this->__removeAllDocuments();
 		unset($this->Post);
 		unset($this->CouchDB);
 		ClassRegistry::flush();
diff --git a/composer.json b/composer.json
index db84230..b570667 100644
--- a/composer.json
+++ b/composer.json
@@ -1,12 +1,25 @@
 {
-    "name": "maurymmarques/couchdb-datasource-cakephp",
-	"license": "MIT",
+    "name": "maurymmarques/couchdb-datasource-plugin",
+    "description": "CouchDB datasource is a CakePHP plugin to facilitate the communication from CakePHP application to CouchDB database.",
     "type": "cakephp-plugin",
-	"version": "1.0.0",
+    "keywords": ["cakephp", "couchdb", "datasource", "plugin"],
+    "homepage": "https://github.com/maurymmarques/couchdb-datasource-cakephp",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Maury M. Marques",
+            "role": "Author"
+        }
+    ],
+    "support": {
+        "issues": "https://github.com/maurymmarques/couchdb-datasource-cakephp/issues",
+        "source": "https://github.com/maurymmarques/couchdb-datasource-cakephp"
+    },
     "require": {
+        "php": ">=5.3.0",
         "composer/installers": "*"
     },
- 	"extra": {
-        "installer-name": "Couchdb"
+    "extra": {
+        "installer-name": "CouchDB"
     }
-}
\ No newline at end of file
+}