Index: DefaultPackageInfo.java
===================================================================
--- DefaultPackageInfo.java	(revision 1430)
+++ DefaultPackageInfo.java	(revision 1431)
@@ -38,6 +38,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import org.apache.commons.lang3.StringUtils;
 
 import org.gvsig.installer.lib.api.Dependencies;
 import org.gvsig.installer.lib.api.Version;
@@ -88,7 +89,10 @@
     private boolean broken = false;
 
     private String state = STATE.DEVEL;
-    private String operatingSystem = OS.ALL;
+//    private String operatingSystem = OS.ALL;
+    private String operatingSystemFamily = OS.ALL;
+    private String operatingSystemName = null;
+    private String operatingSystemVersion = null;
     private String architecture = ARCH.ALL;
     private String javaVM = JVM.J1_5;
 
@@ -236,18 +240,76 @@
         this.official = official;
     }
 
+    @Override
     public String getOperatingSystem() {
-        return operatingSystem;
+        StringBuilder operatingSystem = new StringBuilder();
+        operatingSystem.append(this.operatingSystemFamily);
+        if( !StringUtils.isEmpty(this.operatingSystemName) ) {
+            operatingSystem.append("_");
+            operatingSystem.append(this.operatingSystemName);
+            if( !StringUtils.isEmpty(this.operatingSystemVersion) ) {
+                operatingSystem.append("_");
+                operatingSystem.append(this.operatingSystemVersion);
+            }
+        }
+        return operatingSystem.toString();
     }
 
+    @Override
     public void setOperatingSystem(String operatingSystem) {
     	if( isEmptyString(operatingSystem) ) {
-    		this.operatingSystem = OS.ALL;
+    		this.operatingSystemFamily = OS.ALL;
+    		this.operatingSystemName = null;
+    		this.operatingSystemVersion = null;
     	} else {
-    		this.operatingSystem = operatingSystem;
+            if( operatingSystem.contains("_") ) {
+                String s[] = operatingSystem.split("_");
+                switch(s.length) {
+                    case 2:
+                        this.operatingSystemFamily = s[0];
+                        this.operatingSystemName = s[1];
+                        break;
+                    case 3:
+                        this.operatingSystemFamily = s[0];
+                        this.operatingSystemName = s[1];
+                        this.operatingSystemVersion = s[2];
+                        break;
+                    default:
+                        throw new IllegalArgumentException("Can't parse OS '"+operatingSystem+"'.");
+                }
+            } else {
+                this.operatingSystemFamily = operatingSystem;
+            }
     	}
     }
+    
+    @Override
+    public String getOperatingSystemFamily() {
+        return this.operatingSystemFamily;
+    }
+    
+    @Override
+    public String getOperatingSystemName() {
+        return this.operatingSystemName;
+    }
+    
+    @Override
+    public String getOperatingSystemVersion() {
+        return this.operatingSystemVersion;
+    }
 
+    public void setOperatingSystemFamily(String operatingSystemFamily) {
+        this.operatingSystemFamily = operatingSystemFamily;
+    }
+    
+    public void setOperatingSystemName(String operatingSystemName) {
+        this.operatingSystemName = operatingSystemName;
+    }
+    
+    public void setOperatingSystemVersion(String operatingSystemVersion) {
+        this.operatingSystemVersion = operatingSystemVersion;
+    }
+
     public String getArchitecture() {
         return architecture;
     }
@@ -409,7 +471,7 @@
     	s.append(" ");
     	s.append(strformat(this.state,-5,-5));
     	s.append(" ");
-    	s.append(strformat(this.operatingSystem,-5,-5)); 
+    	s.append(strformat(this.getOperatingSystem(),-5,-5)); 
     	s.append(" ");
     	s.append(strformat(this.architecture,-6,-6));
     	s.append(" ");
@@ -585,6 +647,7 @@
         }
     }
 
+    @Override
     public boolean equals(Object obj) {
         PackageInfo other;
         try {
@@ -598,7 +661,7 @@
         if (!version.check("=", other.getVersion())) {
             return false;
         }
-        if (!operatingSystem.equalsIgnoreCase(other.getOperatingSystem())) {
+        if (!getOperatingSystem().equalsIgnoreCase(other.getOperatingSystem())) {
             return false;
         }
         if (!applicationVersion.equals(other.getApplicationVersion())) {
