Index: src/main/java/org/apache/jackrabbit/ocm/manager/impl/ObjectContentManagerImpl.java
===================================================================
--- src/main/java/org/apache/jackrabbit/ocm/manager/impl/ObjectContentManagerImpl.java	(revision 822775)
+++ src/main/java/org/apache/jackrabbit/ocm/manager/impl/ObjectContentManagerImpl.java	(working copy)
@@ -45,6 +45,7 @@
 import org.apache.jackrabbit.ocm.exception.JcrMappingException;
 import org.apache.jackrabbit.ocm.exception.LockedException;
 import org.apache.jackrabbit.ocm.exception.ObjectContentManagerException;
+import org.apache.jackrabbit.ocm.exception.PathAlreadyExistsException;
 import org.apache.jackrabbit.ocm.exception.VersionException;
 import org.apache.jackrabbit.ocm.lock.Lock;
 import org.apache.jackrabbit.ocm.manager.ObjectContentManager;
@@ -382,6 +383,9 @@
     }
 
     /**
+     * @throws PathAlreadyExistsException
+     * @throws RepositoryException
+     *
      * @see org.apache.jackrabbit.ocm.manager.ObjectContentManager#insert(java.lang.Object)
      */
     public void insert(Object object) {
@@ -392,10 +396,10 @@
                 Item item = session.getItem(path);
                 if (item.isNode()) {
                     if (!((Node) item).getDefinition().allowsSameNameSiblings()) {
-                        throw new ObjectContentManagerException("Path already exists and it is not supporting the same name sibling : " + path);
+                        throw new PathAlreadyExistsException("Path already exists and it is not supporting the same name sibling : " + path);
                     }
                 } else {
-                    throw new ObjectContentManagerException("Path already exists and it is a property : " + path);
+                    throw new PathAlreadyExistsException("Path already exists and it is a property : " + path);
                 }
 
             }
@@ -407,13 +411,15 @@
     }
 
     /**
+     * @throws PathNotFoundException
+     *
      * @see org.apache.jackrabbit.ocm.manager.ObjectContentManager#update(java.lang.Object)
      */
     public void update(Object object) {
         String path = objectConverter.getPath(session, object);
         try {
             if (!session.itemExists(path)) {
-                throw new ObjectContentManagerException("Path is not existing : " + path);
+                throw new PathNotFoundException("Path is not existing : " + path);
             } else {
                 checkIfNodeLocked(path);
             }
@@ -425,13 +431,14 @@
     }
 
     /**
+     * @throws PathNotFoundException
      *
      * @see org.apache.jackrabbit.ocm.manager.ObjectContentManager#remove(java.lang.String)
      */
     public void remove(String path) {
         try {
             if (!session.itemExists(path)) {
-                throw new ObjectContentManagerException("Path does not exist : " + path);
+                throw new org.apache.jackrabbit.ocm.exception.PathNotFoundException("Path does not exist : " + path);
             } else {
                 checkIfNodeLocked(path);
             }
@@ -453,6 +460,7 @@
     }
 
     /**
+     * @throws org.apache.jackrabbit.ocm.exception.InvalidQueryException
      *
      * @see org.apache.jackrabbit.ocm.manager.ObjectContentManager#remove(org.apache.jackrabbit.ocm.query.Query)
      */
@@ -488,7 +496,7 @@
             }
 
         } catch (InvalidQueryException iqe) {
-            throw new org.apache.jackrabbit.ocm.exception.RepositoryException("Invalid query expression", iqe);
+            throw new org.apache.jackrabbit.ocm.exception.InvalidQueryException(iqe);
         } catch (RepositoryException e) {
             throw new org.apache.jackrabbit.ocm.exception.RepositoryException("Impossible to get the object collection", e);
         }
@@ -1062,7 +1070,8 @@
     }
 
     /**
-     *
+     * @throws {@link VersionException}
+     * @throws {@link JcrMappingException}
      * @see org.apache.jackrabbit.ocm.manager.ObjectContentManager#save()
      */
     public void save() {
Index: src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/ObjectConverterImpl.java
===================================================================
--- src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/ObjectConverterImpl.java	(revision 822775)
+++ src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/ObjectConverterImpl.java	(working copy)
@@ -35,6 +35,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.jackrabbit.ocm.exception.AttributeNotFoundException;
 import org.apache.jackrabbit.ocm.exception.IncorrectPersistentClassException;
 import org.apache.jackrabbit.ocm.exception.JcrMappingException;
 import org.apache.jackrabbit.ocm.exception.ObjectContentManagerException;
@@ -155,7 +156,7 @@
 			this.insert(session, parentNode, nodeName, object);
 
 		} catch (PathNotFoundException pnfe) {
-			throw new ObjectContentManagerException("Impossible to insert the object at '" + path + "'", pnfe);
+			throw new org.apache.jackrabbit.ocm.exception.PathNotFoundException("Impossible to insert the object at '" + path + "'", pnfe);
 		} catch (RepositoryException re) {
 			throw new org.apache.jackrabbit.ocm.exception.RepositoryException("Impossible to insert the object at '" + path
 					+ "'", re);
@@ -261,7 +262,7 @@
 			Node parentNode = (Node) session.getItem(parentPath);
 			this.update(session, parentNode, nodeName, object);
 		} catch (PathNotFoundException pnfe) {
-			throw new ObjectContentManagerException("Impossible to update the object at '" + path + "'", pnfe);
+			throw new org.apache.jackrabbit.ocm.exception.PathNotFoundException("Impossible to update the object at '" + path + "'", pnfe);
 		} catch (RepositoryException re) {
 			throw new org.apache.jackrabbit.ocm.exception.RepositoryException("Impossible to update the object at '" + path
 					+ "'", re);
@@ -279,7 +280,7 @@
 			Node objectNode = session.getNodeByUUID(uuId);
 			update(session, objectNode, object);
 		} catch (PathNotFoundException pnfe) {
-			throw new ObjectContentManagerException("Impossible to update the object with UUID: " + uuId , pnfe);
+			throw new org.apache.jackrabbit.ocm.exception.PathNotFoundException("Impossible to update the object with UUID: " + uuId , pnfe);
 		} catch (RepositoryException re) {
 			throw new org.apache.jackrabbit.ocm.exception.RepositoryException("Impossible to update the object with UUID: " + uuId, re);
 		}
@@ -302,8 +303,8 @@
 			updateCollectionFields(session, object, classDescriptor, objectNode);
 			simpleFieldsHelp.refreshUuidPath(session, classDescriptor, objectNode, object);
 	}
-	
 
+
 	/**
 	 *
 	 * @see org.apache.jackrabbit.ocm.manager.objectconverter.ObjectConverter#update(javax.jcr.Session,
@@ -315,7 +316,7 @@
 			Node objectNode = getNode(parentNode,classDescriptor,nodeName,object);
 			update(session, objectNode, object);
 		} catch (PathNotFoundException pnfe) {
-			throw new ObjectContentManagerException("Impossible to update the object: " + nodeName + " at node : " + parentNode, pnfe);
+			throw new org.apache.jackrabbit.ocm.exception.PathNotFoundException("Impossible to update the object: " + nodeName + " at node : " + parentNode, pnfe);
 		} catch (RepositoryException re) {
 			throw new org.apache.jackrabbit.ocm.exception.RepositoryException("Impossible to update the object: "
 					+ nodeName + " at node : " + parentNode, re);
@@ -323,7 +324,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 * @param parentNode the parent node at which to look for the node element.
 	 * @param nodeName the node name to look for
 	 * @param object the data.
@@ -339,19 +340,19 @@
             Object objUuid = ReflectionUtils.getNestedProperty(object, uuidFieldName);
         	String currentItemUuid = (objUuid == null) ? null : objUuid.toString();
         	if (currentItemUuid != null){
-        		//The Node already exists so we need to update the existing node 
+        		//The Node already exists so we need to update the existing node
         		//rather than to replace it.
         		return parentNode.getSession().getNodeByUUID(currentItemUuid);
         	}
         	else{
         		throw new NullPointerException("Cannot locate the node to update since there is no UUID provided even though, " + classDescriptor.getClassName() + " has been mapped with a UUID field , " + uuidFieldName );
         	}
-        		
+
 		}
 		return parentNode.getNode(nodeName);
-		
+
 	}
-	
+
 	/**
 	 * @see org.apache.jackrabbit.ocm.manager.objectconverter.ObjectConverter#getObject(javax.jcr.Session,
 	 *      java.lang.Class, java.lang.String)
@@ -400,7 +401,7 @@
 
 		} catch (PathNotFoundException pnfe) {
 			// HINT should never get here
-			throw new ObjectContentManagerException("Impossible to get the object at " + path, pnfe);
+			throw new org.apache.jackrabbit.ocm.exception.PathNotFoundException("Impossible to get the object at " + path, pnfe);
 		} catch (RepositoryException re) {
 			throw new org.apache.jackrabbit.ocm.exception.RepositoryException("Impossible to get the object at " + path, re);
 		}
@@ -489,7 +490,7 @@
 			return object;
 		} catch (PathNotFoundException pnfe) {
 			// HINT should never get here
-			throw new ObjectContentManagerException("Impossible to get the object at " + path, pnfe);
+			throw new org.apache.jackrabbit.ocm.exception.PathNotFoundException("Impossible to get the object at " + path, pnfe);
 		} catch (RepositoryException re) {
 			throw new org.apache.jackrabbit.ocm.exception.RepositoryException("Impossible to get the object at " + path, re);
 		}
@@ -507,7 +508,7 @@
 
 		} catch (PathNotFoundException pnfe) {
 
-			throw new ObjectContentManagerException("Impossible to get the object at " + path, pnfe);
+			throw new org.apache.jackrabbit.ocm.exception.PathNotFoundException("Impossible to get the object at " + path, pnfe);
 		} catch (RepositoryException re) {
 			throw new org.apache.jackrabbit.ocm.exception.RepositoryException("Impossible to get the object at " + path, re);
 		}
@@ -536,14 +537,14 @@
 				}
 				else
 				{
-					throw new ObjectContentManagerException("Impossible to retrieve the mapped attribute. The attribute '" +
+					throw new AttributeNotFoundException("Impossible to retrieve the mapped attribute. The attribute '" +
 							                                                         attributeName + "'  is not a bean or a collection for the class : " + classDescriptor.getClassName());
 				}
 			}
 
 		} catch (PathNotFoundException pnfe) {
 
-			throw new ObjectContentManagerException("Impossible to get the object at " + path, pnfe);
+			throw new org.apache.jackrabbit.ocm.exception.PathNotFoundException("Impossible to get the object at " + path, pnfe);
 		} catch (RepositoryException re) {
 			throw new org.apache.jackrabbit.ocm.exception.RepositoryException("Impossible to get the object at " + path, re);
 		}
@@ -739,12 +740,12 @@
 							log.debug("a mapped jcrType has been specified, switching from <" + beanClass + "> to <" + ReflectionUtils.forName(className));
 						}
 						beanClass = ReflectionUtils.forName(className);
-					
+
 					} catch (IncorrectPersistentClassException e) {
 						if (log.isDebugEnabled()) {
 							log.debug(beanDescriptor.getClassDescriptor().getJcrType() + " is not mapped");
 						}
-					}					
+					}
 				}
 
 				bean = proxyManager.createBeanProxy(beanConverter, beanConverter.getPath(session, beanDescriptor, node), session, node, beanDescriptor,  mapper.getClassDescriptorByClass(beanClass), beanClass, bean);
Index: src/main/java/org/apache/jackrabbit/ocm/exception/AttributeNotFoundException.java
===================================================================
--- src/main/java/org/apache/jackrabbit/ocm/exception/AttributeNotFoundException.java	(revision 0)
+++ src/main/java/org/apache/jackrabbit/ocm/exception/AttributeNotFoundException.java	(revision 0)
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.ocm.exception;
+
+
+/**
+ * Occurs when the required mapped attribute does not exists.
+ *
+ * @author <a href="mailto:matias.mirabelli@globant.com">Matias Mirabelli</a>
+ */
+public class AttributeNotFoundException extends ObjectContentManagerException {
+    /** Use serialVersionUID for interoperability. */
+    private static final long serialVersionUID = -3448269240349417121L;
+
+    /**
+     * Not intended for usage.
+     */
+    protected AttributeNotFoundException() {}
+
+    /**
+     * Constructor with message.
+     *
+     * @param message the message associated to the exception
+     */
+    public AttributeNotFoundException(String message) {
+        super(message);
+    }
+
+    /**
+     * Constructor with throwable object.
+     *
+     * @param nested the associated throwable object
+     */
+    public AttributeNotFoundException(Throwable nested) {
+        super(nested);
+    }
+
+    /**
+     * Constructor with message and throwable object.
+     *
+     * @param message the message associated to the exception
+     * @param nested the associated throwable object
+     */
+    public AttributeNotFoundException(String message, Throwable nested) {
+        super(message, nested);
+    }
+}
\ No newline at end of file
Index: src/main/java/org/apache/jackrabbit/ocm/exception/ObjectNotFoundException.java
===================================================================
--- src/main/java/org/apache/jackrabbit/ocm/exception/ObjectNotFoundException.java	(revision 0)
+++ src/main/java/org/apache/jackrabbit/ocm/exception/ObjectNotFoundException.java	(revision 0)
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.ocm.exception;
+
+/**
+ * Occurs when the repository tries to retrieve an object that not exists.
+ *
+ * @author <a href="mailto:matias.mirabelli@globant.com">Matias Mirabelli</a>
+ */
+public class ObjectNotFoundException extends RepositoryException {
+    /** Use serialVersionUID for interoperability. */
+    private static final long serialVersionUID = 5620610240858952657L;
+
+    /**
+     * Not intended for usage.
+     */
+    protected ObjectNotFoundException() {}
+
+    /**
+     * Constructor with message.
+     *
+     * @param message the message associated to the exception
+     */
+    public ObjectNotFoundException(String message) {
+        super(message);
+    }
+
+    /**
+     * Constructor with throwable object.
+     *
+     * @param nested the associated throwable object
+     */
+    public ObjectNotFoundException(Throwable nested) {
+        super(nested);
+    }
+
+    /**
+     * Constructor with message and throwable object.
+     *
+     * @param message the message associated to the exception
+     * @param nested the associated throwable object
+     */
+    public ObjectNotFoundException(String message, Throwable nested) {
+        super(message, nested);
+    }
+}
\ No newline at end of file
Index: src/main/java/org/apache/jackrabbit/ocm/exception/CannotRemoveObjectException.java
===================================================================
--- src/main/java/org/apache/jackrabbit/ocm/exception/CannotRemoveObjectException.java	(revision 0)
+++ src/main/java/org/apache/jackrabbit/ocm/exception/CannotRemoveObjectException.java	(revision 0)
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.ocm.exception;
+
+import org.apache.jackrabbit.ocm.manager.ObjectContentManager;
+
+
+/**
+ * Occurs when a {@link ObjectContentManager#remove(Object)} operation fails.
+ *
+ * @author <a href="mailto:matias.mirabelli@globant.com">Matias Mirabelli</a>
+ */
+public class CannotRemoveObjectException extends ObjectContentManagerException {
+    /** Use serialVersionUID for interoperability. */
+    private static final long serialVersionUID = 7475255727868649575L;
+
+    /**
+     * Not intended for usage.
+     */
+    protected CannotRemoveObjectException() {}
+
+    /**
+     * Constructor with message.
+     *
+     * @param message the message associated to the exception
+     */
+    public CannotRemoveObjectException(String message) {
+        super(message);
+    }
+
+    /**
+     * Constructor with throwable object.
+     *
+     * @param nested the associated throwable object
+     */
+    public CannotRemoveObjectException(Throwable nested) {
+        super(nested);
+    }
+
+    /**
+     * Constructor with message and throwable object.
+     *
+     * @param message the message associated to the exception
+     * @param nested the associated throwable object
+     */
+    public CannotRemoveObjectException(String message, Throwable nested) {
+        super(message, nested);
+    }
+}
\ No newline at end of file
Index: src/main/java/org/apache/jackrabbit/ocm/exception/PathAlreadyExistsException.java
===================================================================
--- src/main/java/org/apache/jackrabbit/ocm/exception/PathAlreadyExistsException.java	(revision 0)
+++ src/main/java/org/apache/jackrabbit/ocm/exception/PathAlreadyExistsException.java	(revision 0)
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.ocm.exception;
+
+
+/**
+ * Occurs when the repository tries to insert a path that already exists.
+ *
+ * @author <a href="mailto:matias.mirabelli@globant.com">Matias Mirabelli</a>
+ */
+public class PathAlreadyExistsException extends ObjectContentManagerException {
+    /** Use serialVersionUID for interoperability. */
+    private static final long serialVersionUID = -2067295404293055887L;
+
+    /**
+     * Not intended for usage.
+     */
+    protected PathAlreadyExistsException() {}
+
+    /**
+     * Constructor with message.
+     *
+     * @param message the message associated to the exception
+     */
+    public PathAlreadyExistsException(String message) {
+        super(message);
+    }
+
+    /**
+     * Constructor with throwable object.
+     *
+     * @param nested the associated throwable object
+     */
+    public PathAlreadyExistsException(Throwable nested) {
+        super(nested);
+    }
+
+    /**
+     * Constructor with message and throwable object.
+     *
+     * @param message the message associated to the exception
+     * @param nested the associated throwable object
+     */
+    public PathAlreadyExistsException(String message, Throwable nested) {
+        super(message, nested);
+    }
+}
\ No newline at end of file
Index: src/main/java/org/apache/jackrabbit/ocm/exception/PathNotFoundException.java
===================================================================
--- src/main/java/org/apache/jackrabbit/ocm/exception/PathNotFoundException.java	(revision 0)
+++ src/main/java/org/apache/jackrabbit/ocm/exception/PathNotFoundException.java	(revision 0)
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.ocm.exception;
+
+
+/**
+ * Occurs when the repository tries to retrieve a path that not exists.
+ *
+ * @author <a href="mailto:matias.mirabelli@globant.com">Matias Mirabelli</a>
+ */
+public class PathNotFoundException extends ObjectContentManagerException {
+    /** Use serialVersionUID for interoperability. */
+    private static final long serialVersionUID = -7436790751088459607L;
+
+    /**
+     * Not intended for usage.
+     */
+    protected PathNotFoundException() {}
+
+    /**
+     * Constructor with message.
+     *
+     * @param message the message associated to the exception
+     */
+    public PathNotFoundException(String message) {
+        super(message);
+    }
+
+    /**
+     * Constructor with throwable object.
+     *
+     * @param nested the associated throwable object
+     */
+    public PathNotFoundException(Throwable nested) {
+        super(nested);
+    }
+
+    /**
+     * Constructor with message and throwable object.
+     *
+     * @param message the message associated to the exception
+     * @param nested the associated throwable object
+     */
+    public PathNotFoundException(String message, Throwable nested) {
+        super(message, nested);
+    }
+}
\ No newline at end of file
Index: pom.xml
===================================================================
--- pom.xml	(revision 822775)
+++ pom.xml	(working copy)
@@ -30,7 +30,7 @@
   </parent>
 
   <artifactId>jackrabbit-ocm</artifactId>
-  <version>1.6-SNAPSHOT</version>
+  <version>1.6.1-GLOBANT</version>
   <name>Jackrabbit Object Content Mapping</name>
   <description>
     This Jackrabbit subproject is an object/JCR persistence and
