diff --git a/UyTube_aplicacion/src/Logica/Clases/Canal.java b/UyTube_aplicacion/src/Logica/Clases/Canal.java
index 57eb71643b62afd0cb79f3d5360f6421b5d63818..526a666c674bc3052e06e48cb7c6dacc4b03fbce 100644
--- a/UyTube_aplicacion/src/Logica/Clases/Canal.java
+++ b/UyTube_aplicacion/src/Logica/Clases/Canal.java
@@ -132,6 +132,13 @@ public class Canal {
             throw new RuntimeException("La categoria no puede ser vacia");
         }
         
+         // un canal no puede tener dos videos con el mismo nomre
+         for (Map.Entry<Integer, ListaDeReproduccion> v : misListas.entrySet()){
+             if (v.getValue().getNombre().equals(listaReproduccion.getNombre())){
+                 throw new RuntimeException("El canal ya posee una lista de reproduccion con ese nombre");
+             }
+         }
+         
         ListaDeReproduccion ldr = new ListaDeReproduccion(
                 idLdr, 
                 listaReproduccion.getNombre(), 
@@ -283,6 +290,9 @@ public class Canal {
             for (Map.Entry<Integer, Video> m : misVideos.entrySet()) {
                 m.getValue().setPrivacidad(Privacidad.PRIVADO);
             }
+            for (Map.Entry<Integer, ListaDeReproduccion> m : misListas.entrySet()) {
+                m.getValue().setPrivacidad(Privacidad.PRIVADO);
+            }
         }
         
         this.nombre = canal.getNombre();
@@ -291,6 +301,9 @@ public class Canal {
     }
 
     public void modificarListaDeReproduccion(DtListaDeReproduccion ldr) {
+        if (ldr == null) {
+            throw new RuntimeException("El Datatype de la lista de reprodccion es null");
+        }
         if (this.misListas.containsKey(ldr.getId())) {
             
             if (this.privacidad == Privacidad.PRIVADO && ldr.getPrivacidad() == Privacidad.PUBLICO){
@@ -304,6 +317,10 @@ public class Canal {
     }
 
     public void modificarVideo(DtVideo video) {
+        if(video== null){
+            throw new RuntimeException("El Datatype del video es null");
+        }
+        
         if (this.misVideos.containsKey(video.getId())) {
             
             if (this.privacidad == Privacidad.PRIVADO && video.getPrivacidad() == Privacidad.PUBLICO){
diff --git a/UyTube_aplicacion/src/Logica/Clases/ListaDeReproduccion.java b/UyTube_aplicacion/src/Logica/Clases/ListaDeReproduccion.java
index b87adb7324208e2609060ad5ceeaee94f331bee8..003fbc6ffd9cf27ea0c022d8173d661970266549 100644
--- a/UyTube_aplicacion/src/Logica/Clases/ListaDeReproduccion.java
+++ b/UyTube_aplicacion/src/Logica/Clases/ListaDeReproduccion.java
@@ -65,6 +65,10 @@ public class ListaDeReproduccion {
         return privacidad;
     }
 
+    public void setPrivacidad(Privacidad privacidad) {
+        this.privacidad = privacidad;
+    }
+
     public TipoListaDeReproduccion getTipo() {
         return tipo;
     }
diff --git a/UyTube_aplicacion/src/Logica/Clases/Persona.java b/UyTube_aplicacion/src/Logica/Clases/Persona.java
index da1e0fb7b691b8a472451d715cff787fa0822e12..f6d4a02f9d0d6b4619de7d05a129fc7fea7ae2c1 100644
--- a/UyTube_aplicacion/src/Logica/Clases/Persona.java
+++ b/UyTube_aplicacion/src/Logica/Clases/Persona.java
@@ -1,20 +1,17 @@
 package Logica.Clases;
 
 public class Persona {
-    String nombre;
-    String apellido;
-    String contrnia;
-
-    public Persona(){
-        this.nombre = "";
-        this.apellido = "";
-        this.contrnia = "";
-    }
-
-    public Persona(String nombre, String apellido, String contrnia) {
+    private String nombre;
+    private String apellido;
+    private String contrasenia;
+
+    public Persona(String nombre, String apellido, String contrasenia) {
+        if(contrasenia == ""){
+                throw new RuntimeException("La contraseña no puede ser Vacio");
+        }
         this.nombre = nombre;
         this.apellido = apellido;
-        this.contrnia = contrnia;
+        this.contrasenia = contrasenia;
     }
 
     public String getNombre() {
@@ -33,13 +30,16 @@ public class Persona {
         this.apellido = apellido;
     }
 
-    public String getContraseña() {
-        return contrnia;
+    public String getContrasena() {
+        return contrasenia;
     }
 
-    public void setContraseña(String contraseña) {
-        this.contrnia = contraseña;
+    public void setContrasenia(String contrasenia) {
+        this.contrasenia = contrasenia;
     }
     
+    public boolean validarContrasenia(String pass){
+        return this.contrasenia.equals(pass);
+    }
     
 }
diff --git a/UyTube_aplicacion/src/Logica/Clases/Usuario.java b/UyTube_aplicacion/src/Logica/Clases/Usuario.java
index 7f4cf84439f86c5d19bd202dbbf119caa9a253af..2d7ce3aa7e2bab9b504901740d3be3acfba81ce1 100644
--- a/UyTube_aplicacion/src/Logica/Clases/Usuario.java
+++ b/UyTube_aplicacion/src/Logica/Clases/Usuario.java
@@ -17,8 +17,6 @@ public class Usuario extends Persona{
     private Map<String, Usuario> seguidos;
     
 
-    public Usuario() {}
-    
     public Usuario(String nickname, String correo, Date fechaNacimiento, String imagen, String contrasenia, String nombre, String apellido ,DtCanal DTC) {
         super(nombre,apellido,contrasenia);
         
@@ -36,11 +34,6 @@ public class Usuario extends Persona{
             throw new RuntimeException("El correo no puede ser Vacio");
         }
         
-        if(contrasenia == ""){
-                throw new RuntimeException("La contraseña no puede ser Vacio");
-        }
-        
-        
         this.nickname = nickname;
         this.correo = correo;
         this.fechaNacimiento = fechaNacimiento;
@@ -72,7 +65,7 @@ public class Usuario extends Persona{
     }
 
     public DtUsuario getDT(){
-        return new DtUsuario(this.nickname, this.contrnia, this.nombre, this.apellido, this.correo, this.fechaNacimiento, this.imagen, this.seguidores);//Es el otro constructor
+        return new DtUsuario(this.nickname, super.getContrasena(), super.getNombre(), super.getApellido(), this.correo, this.fechaNacimiento, this.imagen, this.seguidores);
     }
     
     public void actualizarListasPorDefecto(){
@@ -124,6 +117,9 @@ public class Usuario extends Persona{
         if(Usu == null){
             throw new RuntimeException("El usuario no puede ser null");
         }
+        if(Usu == this){
+            throw new RuntimeException("Un usuario no se puede seguir a si mismo");
+        }
         
         if (this.seguidos.containsKey(Usu.getNickname())){
             this.seguidos.remove(Usu.getNickname());
@@ -134,7 +130,8 @@ public class Usuario extends Persona{
         Usu.agregarOQuitarSeguidor(this);
     }
     
-    public void agregarOQuitarSeguidor(Usuario Usu){
+    // si, esta si es private, no es un error
+    private void agregarOQuitarSeguidor(Usuario Usu){
         if(Usu == null){
             throw new RuntimeException("El usuario no puede ser null");
         }
@@ -161,7 +158,11 @@ public class Usuario extends Persona{
             throw new RuntimeException("El usuario no puede ser null");
         }
         
-        this.agregarVideoALista(idLista, idVideo, Usu);
+        Video v = Usu.obtenerVideo(idVideo);
+        if (v == null){
+            throw new RuntimeException("El video no pertenece al usuario: " + Usu.getNickname());
+        }
+        this.MiCanal.agregarVideoALista(idLista, v);
     }
     
     public ArrayList<DtComentario> listarComentariosDeVideo(int idVideo){
@@ -210,13 +211,16 @@ public class Usuario extends Persona{
         if(DtUsu == null){
             throw new RuntimeException("El usuario no puede ser null");
         }
+        if(DtUsu.getFechaNacimiento() == null){
+            throw new RuntimeException("La fecha no puede ser null");
+        }
         if(DtCanal == null){
             throw new RuntimeException("El canal no puede ser null");
         }
         
-        this.nombre = DtUsu.getNombre();
-        this.apellido = DtUsu.getApellido();
-        this.contrnia = DtUsu.getContrasenia();
+        super.setNombre(DtUsu.getNombre());
+        super.setApellido(DtUsu.getApellido());
+        super.setContrasenia(DtUsu.getContrasenia());
         this.fechaNacimiento = DtUsu.getFechaNacimiento();
         this.imagen = DtUsu.getImagen();
         
@@ -227,7 +231,7 @@ public class Usuario extends Persona{
         if(DtListaDeReproduccion == null){
             throw new RuntimeException("La lista de reproduccion no puede ser null");
         }
-                
+        
         this.MiCanal.modificarListaDeReproduccion(DtListaDeReproduccion);
     }
     
@@ -255,8 +259,7 @@ public class Usuario extends Persona{
             throw new RuntimeException("El nickname no puede ser vacio");
         }
         
-        //return this.MiCanal.obtenerValoracion(id, nickname);
-        return null;//Esto se saca
+        return this.MiCanal.obtenerValoracion(id, nickname);
     }
     
     public Video obtenerVideo(int id){
@@ -293,6 +296,5 @@ public class Usuario extends Persona{
         }
         return this.MiCanal.validarListaParticular(nombre);
     }
-    
 }
 
diff --git a/UyTube_aplicacion/src/Logica/Clases/Video.java b/UyTube_aplicacion/src/Logica/Clases/Video.java
index 72403f277033a418cb59a010742c98f6b407c399..edc924e5997d1d201e2872887937ba37bce4c6e6 100644
--- a/UyTube_aplicacion/src/Logica/Clases/Video.java
+++ b/UyTube_aplicacion/src/Logica/Clases/Video.java
@@ -5,12 +5,12 @@ import Logica.DataType.DtVideo;
 import java.sql.Time;
 import java.sql.Date;
 import Logica.Enumerados.Privacidad;
+import Logica.Enumerados.TipoValoracion;
 import java.util.ArrayList;
 import java.util.Map;
 import java.util.TreeMap;
 
-public class Video {
-    
+public class Video {    
     private int id;
     private String nombre;
     private String descripcion;
@@ -30,6 +30,12 @@ public class Video {
     }
     /********************** Constructor *********************/
     public Video(int _id, String _nombre, String _descripcion,Time _duracion, Date _fechaPublicacion,String _urlVideoOriginal,String _categoria ){
+        if( _id < 0){ throw new RuntimeException("Error, el id del video es un negativo o cero."); }
+        if( _nombre == ""){ throw new RuntimeException("Error, el nombre del video está vacío");}
+        if( _duracion == null){ throw new RuntimeException("Error, la duración del video es null.");}
+        if( _fechaPublicacion == null){ throw new RuntimeException("Error, la fecha de publicación del video es null.");}
+        if( _urlVideoOriginal == ""){ throw new RuntimeException("Error, la url del video está vacía.");}
+        if( _categoria == "" ){ throw new RuntimeException("Error, la descripción del video está vacía.");}
         this.id = _id;
         this.nombre = _nombre;
         this.descripcion = _descripcion;
@@ -43,6 +49,13 @@ public class Video {
     
     /** Agregar un nuevo comentario **/
     public void agregarComentario(DtComentario dtComentario, Usuario usuario){
+        if (dtComentario == null){
+            throw new RuntimeException("El DataType es null");
+        }
+        if (usuario == null){
+            throw new RuntimeException("El usuario es null");
+        }
+        
         int nuevoId = Comentario.getNuevoID();
         Comentario nuevoComentario = new Comentario(nuevoId, dtComentario.getFecha(), dtComentario.getTexto(), 0, usuario);
         comentarios.put(nuevoId, nuevoComentario);
@@ -50,6 +63,13 @@ public class Video {
     
     /*  Agregar un subcomentario a un comentario existente  */
     public void agregarComentario(int idCom, DtComentario dtComentario, Usuario usuario){
+        if (dtComentario == null){
+            throw new RuntimeException("El DataType es null");
+        }
+        if (usuario == null){
+            throw new RuntimeException("El usuario es null");
+        }
+        
         for (Map.Entry<Integer, Comentario> coment : comentarios.entrySet()) {
             if(coment.getValue().agregarSubComentario(idCom, dtComentario, usuario)){
                 break;
@@ -58,24 +78,58 @@ public class Video {
     }
     
     /* Agrega o midifica una valoración */
-    public void agregarModificarValoracion(DtValoracion dtValoracion, Usuario usuario){
+    public void agregarModificarValoracion(DtValoracion dtValoracion, Usuario usuario) {
+        if (dtValoracion == null) {
+            throw new RuntimeException("El DataType es null");
+        }
+        if (usuario == null){
+            throw new RuntimeException("El usuario es null");
+        }
+        
         String nickname = usuario.getNickname();
-        for(Valoracion val: valoraciones){
-            if(val.modificar(dtValoracion, nickname)){
-                break;
+        // por las dudas, para que los contadores de likes no queden inconsistentes:
+        // obtengo la valoracion que le habia dado antes el usuario (si es que lo habia alorado)
+        DtValoracion dtv = this.obtenerValoracion(nickname);
+        // si el usuario ya lo valoro
+        if (dtv != null) {
+            // segun cual fuera la valoracion anterior, resta 1 al contador
+            if (dtv.getVal() == TipoValoracion.LIKE) {
+                cantLikes--;
+            } else {
+                cantDisLikes--;
+            }
+
+            for (Valoracion val : valoraciones) {
+                if (val.modificar(dtValoracion, nickname)) {
+                    break;
+                }
             }
+        } else {
+            Valoracion nuevaValoracion = new Valoracion(dtValoracion.getVal(), usuario);
+            valoraciones.add(nuevaValoracion);
         }
+
+        // segun cual sea la nueva valoracion, suma 1 al contador
+        if (dtValoracion.getVal() == TipoValoracion.LIKE) {
+            cantLikes++;
+        } else {
+            cantDisLikes++;
+        }
+
     }
-    
+
     public DtVideo getDt(){
         return new DtVideo(this.id, this.nombre, this.descripcion, this.duracion, this.fechaPublicacion, this.urlVideoOriginal, this.privacidad, this.categoria, this.cantLikes, this.cantDisLikes);
     }
     
     public ArrayList<DtComentario> listarComentarios(){
-        ArrayList<DtComentario> listaComent = new ArrayList<DtComentario>();        
-        for (Map.Entry<Integer, Comentario> coment : comentarios.entrySet()) {            
-            DtComentario dtComent = new DtComentario(coment.getValue().getId(), coment.getValue().getUsr().getNickname(), coment.getValue().getFecha(), coment.getValue().getTexto(), coment.getValue().getNivelSubComentario());
-            listaComent.add(dtComent);            
+        ArrayList<DtComentario> listaComent = new ArrayList<DtComentario>();
+        // recorro los comentarios sobre el video
+        for (Map.Entry<Integer, Comentario> coment : comentarios.entrySet()) {
+            // le obtengo el DT y lo agrego a la lista resultado
+            listaComent.add(coment.getValue().getDT());
+            // agrego a la lista resultado, la lista de sub comentarios
+            listaComent.addAll(coment.getValue().listarSubComentarios());
         }
         return listaComent;
     }
@@ -100,8 +154,8 @@ public class Video {
             throw new RuntimeException("El nombre no puede ser vacío");
         } 
         
-        if (dtVideo.getDescripcion() == "") {
-            throw new RuntimeException("La descripcion no puede ser vacía");
+        if (dtVideo.getDuracion()== null) {
+            throw new RuntimeException("La duracion no puede ser vacía");
         }
         
         if (dtVideo.getFechaPublicacion() == null) {
@@ -122,13 +176,16 @@ public class Video {
     }
     
     /*   Obtiene la valoracion que hizo un usuario */
-    public DtValoracion obtenerValoracion(String nickname){
+    public DtValoracion obtenerValoracion(String nickname) {
+        if (nickname.equals("")) {
+            throw new RuntimeException("El nickname no puede ser vacio");
+        }
         for(int i = 0; i < this.valoraciones.size(); i++){
             if( valoraciones.get(i).getNicknameDeUsuario() == nickname){
                 return valoraciones.get(i).getDT();
             }
         }
-        return new DtValoracion();
+        return null;
     }
     
     public void quitarValoracion(String nickname){
@@ -137,6 +194,21 @@ public class Video {
         }
         // Recorrer todas las valoraciones hasta encontrar la valoracion cuyo usuario sea el que tiene ese nickname
         // cuando la encuentre, la saca de la coleccion
+        for(int i = 0; i < this.valoraciones.size(); i++){
+            if(valoraciones.get(i).getNicknameDeUsuario().equals(nickname) ){
+
+                // segun cual fuera la valoracion anterior, resta 1 al contador
+                if (valoraciones.get(i).getVal() == TipoValoracion.LIKE) {
+                    cantLikes--;
+                } else {
+                    cantDisLikes--;
+                }
+                
+                // remueve de la coleccion
+                valoraciones.remove(i);
+                break;
+            }
+        }
     }