Index: api/container/src/main/java/org/codehaus/cargo/container/deployable/RAR.java
===================================================================
--- api/container/src/main/java/org/codehaus/cargo/container/deployable/RAR.java	(revision 2530)
+++ api/container/src/main/java/org/codehaus/cargo/container/deployable/RAR.java	(working copy)
@@ -30,6 +30,12 @@
 {
 
     /**
+     * The name of this deployable (it can be anything, there's no special rule). If not specified 
+     * by user, it is computed from the RAR's file name (removing the filename extension).
+     */
+    private String name;
+    
+    /**
      * {@inheritDoc}
      * 
      * @see AbstractDeployable#AbstractDeployable(String)
@@ -38,7 +44,30 @@
     {
         super(rar);
     }
+  
+     /**
+     * Parse the EAR file name to set up the EAR name. The parsing occurs only if the user has not 
+     * already specified a custom name. 
+     *
+     * @see #setName(String)
+     */
+    private void parseName()
+    {
+        if (this.name == null)
+        {
+            String name = getFileHandler().getName(getFile());
+            int nameIndex = name.toLowerCase().lastIndexOf(".rar");
+            if (nameIndex >= 0)
+            {
+                name = name.substring(0, nameIndex);
+            }
 
+            getLogger().debug("Parsed RAR name = [" + name + "]", this.getClass().getName());
+            
+            setName(name);
+        }
+    }
+
     /**
      * {@inheritDoc}
      * 
@@ -57,5 +86,24 @@
     {
         return getFileHandler().isDirectory(getFile());
     }
+
+/**
+     * @param name the name of this deployable. It can be anything (there's no special rule). If 
+     *        not specified by user, it is computed from the RAR's file name (removing the filename 
+     *        extension).
+     */
+    public synchronized void setName(String name)
+    {
+        this.name = name;
+    }
+
+    /**
+     * @return the name of this deployable
+     */
+    public synchronized String getName()
+    {
+        parseName();
+        return this.name;
+    }
    
-}
\ No newline at end of file
+}
Index: api/container/src/main/java/org/codehaus/cargo/container/spi/deployer/AbstractCopyingInstalledLocalDeployer.java
===================================================================
--- api/container/src/main/java/org/codehaus/cargo/container/spi/deployer/AbstractCopyingInstalledLocalDeployer.java	(revision 2530)
+++ api/container/src/main/java/org/codehaus/cargo/container/spi/deployer/AbstractCopyingInstalledLocalDeployer.java	(working copy)
@@ -337,8 +337,17 @@
      */
     protected void deployRar(String deployableDir, RAR rar)
     {
+        String rarName = rar.getName();
+        if (rarName == null)
+        {
+            rarName = getFileHandler().getName(rar.getName());
+        }
+        if (!rarName.toLowerCase().contains(".rar"))
+        {
+            rarName = rarName + ".rar";
+        }
         getFileHandler().copyFile(rar.getFile(),
-            getFileHandler().append(deployableDir, getFileHandler().getName(rar.getFile())));
+            getFileHandler().append(deployableDir, rarName));
     }
     
     /**
