diff --git a/Documentacion_de_proyecto/Planificacion.xls b/Documentacion_de_proyecto/Entrega_1_Planificacion_gr01.xls
similarity index 100%
rename from Documentacion_de_proyecto/Planificacion.xls
rename to Documentacion_de_proyecto/Entrega_1_Planificacion_gr01.xls
diff --git a/Documentacion_de_proyecto/Registro_de_horas_T1_gr01.xls b/Documentacion_de_proyecto/Entrega_1_Registro_de_horas_gr01.xls
similarity index 100%
rename from Documentacion_de_proyecto/Registro_de_horas_T1_gr01.xls
rename to Documentacion_de_proyecto/Entrega_1_Registro_de_horas_gr01.xls
diff --git a/Documentacion_de_proyecto/Entrega_2_Planificacion_gr01.xlsx b/Documentacion_de_proyecto/Entrega_2_Planificacion_gr01.xlsx
new file mode 100644
index 0000000000000000000000000000000000000000..2f0bd50c35ebbccc61e66683ed93e17377f7cc08
Binary files /dev/null and b/Documentacion_de_proyecto/Entrega_2_Planificacion_gr01.xlsx differ
diff --git a/Documentacion_de_proyecto/Entrega_2_Registro_de_horas_gr01.xlsx b/Documentacion_de_proyecto/Entrega_2_Registro_de_horas_gr01.xlsx
new file mode 100644
index 0000000000000000000000000000000000000000..9ebc6fc1caecb139dc5433ffc79c5c69fa327477
Binary files /dev/null and b/Documentacion_de_proyecto/Entrega_2_Registro_de_horas_gr01.xlsx differ
diff --git a/Documentacion_de_proyecto/Laboratorio_2.pdf b/Documentacion_de_proyecto/Laboratorio_2.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..7259d2ee217e0584174dc3ce6123fb9ee1218b40
Binary files /dev/null and b/Documentacion_de_proyecto/Laboratorio_2.pdf differ
diff --git a/UyTube_estacion_de_trabajo/Imagenes/perfiles/JotaJota96.JPG b/UyTube_estacion_de_trabajo/Imagenes/perfiles/JotaJota96.JPG
deleted file mode 100644
index 3efaaeaebf1d20cb7f712514b0cfc0096f6b0007..0000000000000000000000000000000000000000
Binary files a/UyTube_estacion_de_trabajo/Imagenes/perfiles/JotaJota96.JPG and /dev/null differ
diff --git a/UyTube_estacion_de_trabajo/dist/lib/UyTube_logica.jar b/UyTube_estacion_de_trabajo/dist/lib/UyTube_logica.jar
index 13f002b786dcb9e64b9cb2acd1a9c9afbd075b20..640d5acbcbd3ed267951ab3606fa6fef347aab99 100644
Binary files a/UyTube_estacion_de_trabajo/dist/lib/UyTube_logica.jar and b/UyTube_estacion_de_trabajo/dist/lib/UyTube_logica.jar differ
diff --git a/UyTube_estacion_de_trabajo/librerias/Imagenes/about.png b/UyTube_estacion_de_trabajo/librerias/Imagenes/about.png
new file mode 100644
index 0000000000000000000000000000000000000000..937e151247a0fb9b1e63ea91a4ea849744f012da
Binary files /dev/null and b/UyTube_estacion_de_trabajo/librerias/Imagenes/about.png differ
diff --git a/UyTube_estacion_de_trabajo/librerias/Imagenes/des.jpeg b/UyTube_estacion_de_trabajo/librerias/Imagenes/des.jpeg
new file mode 100644
index 0000000000000000000000000000000000000000..7a7eb2ebcdb13adad971a990838700e2ba23ab7d
Binary files /dev/null and b/UyTube_estacion_de_trabajo/librerias/Imagenes/des.jpeg differ
diff --git a/UyTube_estacion_de_trabajo/librerias/Imagenes/icono.jpg b/UyTube_estacion_de_trabajo/librerias/Imagenes/icono.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e1c6c0706f82d5f48c7f8719a85952965bb15b21
Binary files /dev/null and b/UyTube_estacion_de_trabajo/librerias/Imagenes/icono.jpg differ
diff --git a/UyTube_estacion_de_trabajo/librerias/Imagenes/ukp.png b/UyTube_estacion_de_trabajo/librerias/Imagenes/ukp.png
new file mode 100644
index 0000000000000000000000000000000000000000..5939b67d080df91af9d46511590d81eda44a17b9
Binary files /dev/null and b/UyTube_estacion_de_trabajo/librerias/Imagenes/ukp.png differ
diff --git a/UyTube_estacion_de_trabajo/librerias/UyTube_logica.jar b/UyTube_estacion_de_trabajo/librerias/UyTube_logica.jar
index 3d50499f09a11d47c7795f8690f58bb0189b6d18..cb2f4ed6ea79fef7158ecddef00f8c964845c9c3 100644
Binary files a/UyTube_estacion_de_trabajo/librerias/UyTube_logica.jar and b/UyTube_estacion_de_trabajo/librerias/UyTube_logica.jar differ
diff --git a/UyTube_estacion_de_trabajo/src/Presentacion/FuncionesImagenes.java b/UyTube_estacion_de_trabajo/src/Presentacion/FuncionesImagenes.java
new file mode 100644
index 0000000000000000000000000000000000000000..08a40cdcb1f517bd1baaa940c60f53313e3c2bc4
--- /dev/null
+++ b/UyTube_estacion_de_trabajo/src/Presentacion/FuncionesImagenes.java
@@ -0,0 +1,160 @@
+package Presentacion;
+
+import java.awt.Image;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import javax.swing.ImageIcon;
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+import javax.swing.filechooser.FileNameExtensionFilter;
+import sun.awt.image.ByteArrayImageSource;
+import sun.awt.image.ToolkitImage;
+
+public class FuncionesImagenes {
+    
+    public static byte[] pathToByteArray(String ruta) {
+        try {
+            File f = new File(ruta); //asociamos el archivo fisico
+            InputStream is = new FileInputStream(f); //lo abrimos. Lo importante es que sea un InputStream
+            byte[] buffer = new byte[(int) f.length()]; //creamos el buffer
+            int readers = is.read(buffer); //leemos el archivo al buffer
+            return buffer;
+        } catch (IOException e) {
+            throw new RuntimeException(e.getMessage());
+        }
+    }
+
+    public static Image byteArrayToImage(byte[] arrayDeBytes) {
+        try {
+            Image image = new ToolkitImage(new ByteArrayImageSource(arrayDeBytes)); //lo convertimos a Image
+            return image;
+        } catch (Exception e) {
+            throw new RuntimeException(e.getMessage());
+        }
+    }
+    
+    public static String seleccionarImagen() {
+        // Crea un JFileChooser
+        JFileChooser JFC = new JFileChooser();
+        // crea un filtro para aceptar solo algunas extensiones
+        FileNameExtensionFilter filtroImagen = new FileNameExtensionFilter("JPG", "JPEG", "PNG", "jpg", "jpeg", "png");
+        // Agrega el filtro al JFileChooser
+        JFC.setFileFilter(filtroImagen);
+
+        // archivo seleccionado
+        File archivo;
+        // para saber si se selecciono algo o se cancelo
+        int resultado;
+
+        while (true) {
+            // muestra el JFileChooser
+            resultado = JFC.showOpenDialog(null);
+
+            // Si pasa algo que no sea el aceptar
+            if (resultado != JFileChooser.APPROVE_OPTION) {
+                return "";
+            }
+
+            // obtiene el archivo seleccionado
+            archivo = JFC.getSelectedFile();
+
+            // Si se selecciono algun archivo
+            if (archivo != null) {
+                // obtiene la ruta del archivo
+                String rutaArchivo = archivo.getAbsolutePath();
+                // obtiene el archivo como imagen a partir de la ruta
+                Image img = new ImageIcon(rutaArchivo).getImage();
+
+                // verifica que tanto se deformará la imagen al mostrarla en un cuadrado
+                float deformacion;
+                if (img.getHeight(null) > img.getWidth(null)) {
+                    deformacion = img.getHeight(null) / img.getWidth(null);
+                } else {
+                    deformacion = img.getWidth(null) / img.getHeight(null);
+                }
+
+                if (deformacion < 1.3 && deformacion >= 1) {
+                    // si no se deforma demasiado
+                    // devuelve la ruta absoluta
+                    return rutaArchivo;
+                } else {
+                    // si se deforma demasiado, lo avisa al usuario para que escoja otra
+                    JOptionPane.showMessageDialog(null,
+                            "La imagen es demasiado alta o demasiado ancha.\n" + img.getWidth(null) + "x" + img.getHeight(null),
+                            "Problemas con la imagen",
+                            JOptionPane.WARNING_MESSAGE
+                    );
+                }
+            } else {
+                // sino devuelve un string vacio
+                return "";
+            }
+        }
+    }
+    
+    public static void cargarImagenPorDefectoEnJlabel(javax.swing.JLabel jLabelx) {
+        jLabelx.setText(null);
+        String Ruta = "Imagenes\\ukp.png";
+        // Carga la imagen a la variable de tipo Image
+        Image img = new ImageIcon(Ruta).getImage();
+        // Crea un ImageIcon a partir de la imagen (obtiene las dimenciones del jLbel y escala la imagen para que entre en el mismo)
+        ImageIcon icono = new ImageIcon(
+                img.getScaledInstance(jLabelx.getWidth(), jLabelx.getHeight(), Image.SCALE_SMOOTH)
+        );
+        // establece la imagen en el label
+        jLabelx.setIcon(icono);
+    }
+
+
+    public static void cargarImagenEnJlabel(javax.swing.JLabel jLabelx, Image img) {
+        jLabelx.setText(null);
+        if (img == null){
+            jLabelx.setIcon(null);
+            return;
+        }
+        // Carga la imagen a la variable de tipo Image
+        // Crea un ImageIcon a partir de la imagen (obtiene las dimenciones del jLbel y escala la imagen para que entre en el mismo)
+        ImageIcon icono = new ImageIcon(
+                img.getScaledInstance(jLabelx.getWidth(), jLabelx.getHeight(), Image.SCALE_SMOOTH)
+        );
+        // establece la imagen en el label
+        jLabelx.setIcon(icono);
+    }
+    
+    public static String getExtensionArchivo(String nombreArchivo){
+        String ret = "";
+        // recorre desde el final hacia el principio hasta encontrar un '.'  extrayendo la extension del archivo
+        for (int i = nombreArchivo.length() - 1; i >= 0; i--) {
+            if (nombreArchivo.charAt(i) == '.') {
+                break;
+            }
+            ret = nombreArchivo.charAt(i) + ret;
+        }
+        // si la extension obtenida es igual al nombre del archivo, entonces no se encontro ningun punto y el archivo no tienee extension
+        if (ret.equals(nombreArchivo)) {
+            return "";
+        }
+        // sino devuelve la extension obtenida
+        return ret;
+    }
+    
+    
+    public static String getNombreArchivo(String nombreArchivo){
+        String ret = "";
+        // recorre desde el final hacia el principio hasta encontrar un '.'  extrayendo la extension del archivo
+        for (int i = nombreArchivo.length() - 1; i >= 0; i--) {
+            if (nombreArchivo.charAt(i) == '/' || nombreArchivo.charAt(i) == '\\') {
+                break;
+            }
+            ret = nombreArchivo.charAt(i) + ret;
+        }
+        // si la extension obtenida es igual al nombre del archivo, entonces no se encontro ningun punto y el archivo no tienee extension
+        if (ret.equals(nombreArchivo)) {
+            return "";
+        }
+        // sino devuelve la extension obtenida
+        return ret;
+    }
+}
diff --git a/UyTube_estacion_de_trabajo/src/Presentacion/Usuario/frmAltaUsuario.java b/UyTube_estacion_de_trabajo/src/Presentacion/Usuario/frmAltaUsuario.java
index f10d56fc834f3a782dbea303dc89cfd06b0ac029..8a704a3201d421f672dcbfc28e0aaa02ae1fd9e2 100644
--- a/UyTube_estacion_de_trabajo/src/Presentacion/Usuario/frmAltaUsuario.java
+++ b/UyTube_estacion_de_trabajo/src/Presentacion/Usuario/frmAltaUsuario.java
@@ -1,10 +1,13 @@
 package Presentacion.Usuario;
 
 import Logica.DataType.DtCanal;
+import Logica.DataType.DtImagenUsuario;
 import Logica.DataType.DtUsuario;
 import Logica.Enumerados.Privacidad;
 import Logica.Fabrica;
 import Logica.Interfaces.IAdmin;
+import Logica.Interfaces.IPersistenciaDeImagenes;
+import Presentacion.FuncionesImagenes;
 import com.sun.glass.events.KeyEvent;
 import java.awt.Color;
 import java.awt.Image;
@@ -54,7 +57,7 @@ public class frmAltaUsuario extends javax.swing.JDialog {
         this.setLocationRelativeTo(null);
         sys = Fabrica.getInstancia().getIAdmin();
         bordeDefault = txtNombre.getBorder();
-        cargarImagenEnJlabel(lbImg, "");
+        FuncionesImagenes.cargarImagenPorDefectoEnJlabel(lbImg);
     }
     
     private boolean validarFormatoEmail(String _email){
@@ -163,7 +166,7 @@ public class frmAltaUsuario extends javax.swing.JDialog {
         jDateChooser1.setDate(null);
         lbImg.setIcon(null);
         ruta = "";
-        cargarImagenEnJlabel(lbImg, ruta);
+        FuncionesImagenes.cargarImagenEnJlabel(lbImg, null);
     }
 
     @SuppressWarnings("unchecked")
@@ -424,86 +427,17 @@ public class frmAltaUsuario extends javax.swing.JDialog {
     private void btSeleccionarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btSeleccionarActionPerformed
         //cargarImagen(lbImagen);
         String rutaAnterior = ruta;
-        ruta = seleccionarImagen();
+        ruta = FuncionesImagenes.seleccionarImagen();
         if (ruta.isEmpty()) {
             ruta = rutaAnterior;
         }
-        cargarImagenEnJlabel(lbImg, ruta);
-    }//GEN-LAST:event_btSeleccionarActionPerformed
-    
-    private void cargarImagenEnJlabel(javax.swing.JLabel jLabelx, String Ruta) {
-        jLabelx.setText(null);
-        if (Ruta == null || Ruta.isEmpty()){
-            Ruta = "Imagenes\\ukp.png";
-        }
-        // Carga la imagen a la variable de tipo Image
-        Image img = new ImageIcon(Ruta).getImage();
-        // Crea un ImageIcon a partir de la imagen (obtiene las dimenciones del jLbel y escala la imagen para que entre en el mismo)
-        ImageIcon icono = new ImageIcon(
-                img.getScaledInstance(jLabelx.getWidth(), jLabelx.getHeight(), Image.SCALE_SMOOTH)
+        FuncionesImagenes.cargarImagenEnJlabel(
+                lbImg, 
+                FuncionesImagenes.byteArrayToImage(
+                        FuncionesImagenes.pathToByteArray(ruta)
+                )
         );
-        // establece la imagen en el label
-        jLabelx.setIcon(icono);
-    }
-    
-    private String seleccionarImagen() {
-        // Crea un JFileChooser
-        JFileChooser JFC = new JFileChooser();
-        // crea un filtro para aceptar solo algunas extensiones
-        FileNameExtensionFilter filtroImagen = new FileNameExtensionFilter("JPG", "JPEG", "PNG", "jpg", "jpeg", "png");
-        // Agrega el filtro al JFileChooser
-        JFC.setFileFilter(filtroImagen);
-
-        // archivo seleccionado
-        File archivo;
-        // para saber si se selecciono algo o se cancelo
-        int resultado;
-
-        while (true) {
-            // muestra el JFileChooser
-            resultado = JFC.showOpenDialog(this);
-
-            // Si pasa algo que no sea el aceptar
-            if (resultado != JFileChooser.APPROVE_OPTION) {
-                return "";
-            }
-
-            // obtiene el archivo seleccionado
-            archivo = JFC.getSelectedFile();
-
-            // Si se selecciono algun archivo
-            if (archivo != null) {
-                // obtiene la ruta del archivo
-                String rutaArchivo = archivo.getAbsolutePath();
-                // obtiene el archivo como imagen a partir de la ruta
-                Image img = new ImageIcon(rutaArchivo).getImage();
-
-                // verifica que tanto se deformará la imagen al mostrarla en un cuadrado
-                float deformacion;
-                if (img.getHeight(null) > img.getWidth(null)) {
-                    deformacion = img.getHeight(null) / img.getWidth(null);
-                } else {
-                    deformacion = img.getWidth(null) / img.getHeight(null);
-                }
-
-                if (deformacion < 1.3 && deformacion >= 1) {
-                    // si no se deforma demasiado
-                    // devuelve la ruta absoluta
-                    return rutaArchivo;
-                } else {
-                    // si se deforma demasiado, lo avisa al usuario para que escoja otra
-                    JOptionPane.showMessageDialog(null,
-                            "La imagen es demasiado alta o demasiado ancha.\n" + img.getWidth(null) + "x" + img.getHeight(null),
-                            "Problemas con la imagen",
-                            JOptionPane.WARNING_MESSAGE
-                    );
-                }
-            } else {
-                // sino devuelve un string vacio
-                return "";
-            }
-        }
-    }
+    }//GEN-LAST:event_btSeleccionarActionPerformed
     
     private void btnCargarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCargarActionPerformed
         jDateChooser1.setBorder(bordeDefault);
@@ -566,6 +500,19 @@ public class frmAltaUsuario extends javax.swing.JDialog {
             DtUsuario dtUsuario = new DtUsuario(nickname, nickname, nombre, apellido, email, fecha, ruta, 0);
             DtCanal dtCanal = new DtCanal(0, nombreCanal, descripcion, privacidad);
             sys.altaUsuarioCanal(dtUsuario, dtCanal);
+            
+            IPersistenciaDeImagenes pi = Fabrica.getInstancia().getIPersistenciaDeImagenes();
+            if (ruta == null || ruta.equals("")) {
+                // no se hace nada
+            } else {
+                DtImagenUsuario dtiu = new DtImagenUsuario(
+                        dtUsuario.getNickname(),
+                        FuncionesImagenes.pathToByteArray(ruta),
+                        FuncionesImagenes.getNombreArchivo(ruta)
+                );
+                pi.create(dtiu);
+            }
+            
             JOptionPane.showMessageDialog(null, "Se ha creado el usuario "+nickname, "Alta de usuario", JOptionPane.INFORMATION_MESSAGE);
             limpiarCampos();
         } catch (Exception e) {
@@ -676,7 +623,7 @@ public class frmAltaUsuario extends javax.swing.JDialog {
     private void btnQuitarImagenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnQuitarImagenActionPerformed
          // Quitar imagen
         ruta = "";
-        cargarImagenEnJlabel(lbImg, ruta);
+        FuncionesImagenes.cargarImagenPorDefectoEnJlabel(lbImg);
     }//GEN-LAST:event_btnQuitarImagenActionPerformed
 
        
diff --git a/UyTube_estacion_de_trabajo/src/Presentacion/Usuario/frmConsultaUsuario.java b/UyTube_estacion_de_trabajo/src/Presentacion/Usuario/frmConsultaUsuario.java
index 022a893a1178d7fd88e200d8b642361b9843ea0c..1d440ef1a9c1e2c62d7938ee06ed7fe3abd58ad5 100644
--- a/UyTube_estacion_de_trabajo/src/Presentacion/Usuario/frmConsultaUsuario.java
+++ b/UyTube_estacion_de_trabajo/src/Presentacion/Usuario/frmConsultaUsuario.java
@@ -2,12 +2,15 @@ package Presentacion.Usuario;
 
 import Presentacion.ListaDeReproduccion.*;
 import Logica.DataType.DtCanal;
+import Logica.DataType.DtImagenUsuario;
 import Logica.DataType.DtListaDeReproduccion;
 import Logica.DataType.DtUsuario;
 import Logica.DataType.DtVideo;
 import Logica.Enumerados.Privacidad;
 import Logica.Fabrica;
 import Logica.Interfaces.IAdmin;
+import Logica.Interfaces.IPersistenciaDeImagenes;
+import Presentacion.FuncionesImagenes;
 import Presentacion.Video.frmConsultaVideo;
 import java.awt.Image;
 import java.text.SimpleDateFormat;
@@ -28,7 +31,7 @@ public class frmConsultaUsuario extends javax.swing.JDialog {
         this.setLocationRelativeTo(null);
         
         try {
-            cargarImagenEnJlabel(lbImagen, "");
+            FuncionesImagenes.cargarImagenEnJlabel(lbImagen, null);
             lbImagen.setEnabled(false);
             // obtiene la instancia de sistema
             sys = Fabrica.getInstancia().getIAdmin();
@@ -327,7 +330,6 @@ public class frmConsultaUsuario extends javax.swing.JDialog {
         }
         lstListaReproduccion.setModel(modelo);
     }
-    
     private void listarUsuariosSeguidos(ArrayList<DtUsuario> ListaUsuarios){
         lbCantSeguidos.setText(String.valueOf(ListaUsuarios.size()));
         DefaultListModel modelo = new DefaultListModel();
@@ -350,8 +352,23 @@ public class frmConsultaUsuario extends javax.swing.JDialog {
         lbEmail.setText(u.getCorreo());
         lbFechaN.setText(new SimpleDateFormat("dd-MM-yyyy").format(u.getFechaNacimiento()));
         lbCantSeguidores.setText(String.valueOf(u.getCantSeguidores()));
-        cargarImagenEnJlabel(lbImagen, u.getImagen());
         lbImagen.setEnabled(true);
+        
+        try {
+            IPersistenciaDeImagenes pi = Fabrica.getInstancia().getIPersistenciaDeImagenes();
+            DtImagenUsuario dtiu = pi.find(u.getNickname());
+            if (dtiu == null){
+                FuncionesImagenes.cargarImagenPorDefectoEnJlabel(lbImagen);
+            }else{
+                FuncionesImagenes.cargarImagenEnJlabel(
+                        lbImagen,
+                        FuncionesImagenes.byteArrayToImage(dtiu.getImagen())
+                );
+            }
+        } catch (Exception e) {
+            JOptionPane.showMessageDialog(null, "Ha ocurrido un error al cargar la imagen del usuario\n" + e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
+        }
+        
     }
     private void cargarLabelsConDatosDelCanal(DtCanal c){
         lbNombreCanal.setText(c.getNombre());
@@ -362,20 +379,6 @@ public class frmConsultaUsuario extends javax.swing.JDialog {
             lbPrivacidad.setText("Privado");
         }
     }
-    private void cargarImagenEnJlabel(javax.swing.JLabel jLabelx, String Ruta){
-        jLabelx.setText(null);
-        if (Ruta == null || Ruta.isEmpty()){
-            Ruta = "Imagenes\\ukp.png";
-        }
-        // Carga la imagen a la variable de tipo Image
-        Image img = new ImageIcon(Ruta).getImage();
-        // Crea un ImageIcon a partir de la imagen (obtiene las dimenciones del jLbel y escala la imagen para que entre en el mismo)
-        ImageIcon icono = new ImageIcon(
-                img.getScaledInstance(jLabelx.getWidth(), jLabelx.getHeight(), Image.SCALE_SMOOTH)
-        );
-        // establece la imagen en el label
-        jLabelx.setIcon(icono);
-    }
     ///////////////////////////////////////////////////////////////////////////////////////////
     
     // Variables declaration - do not modify//GEN-BEGIN:variables
diff --git a/UyTube_estacion_de_trabajo/src/Presentacion/Usuario/frmConsultaUsuarioEliminado.java b/UyTube_estacion_de_trabajo/src/Presentacion/Usuario/frmConsultaUsuarioEliminado.java
index bfb489830e76fb20f4a35db4843c21063152e006..6ad28e97f0f86b1f0bb6c4ad4cf2f2d537688b41 100644
--- a/UyTube_estacion_de_trabajo/src/Presentacion/Usuario/frmConsultaUsuarioEliminado.java
+++ b/UyTube_estacion_de_trabajo/src/Presentacion/Usuario/frmConsultaUsuarioEliminado.java
@@ -1,12 +1,15 @@
 package Presentacion.Usuario;
 
 import Logica.DataType.DtCanal;
+import Logica.DataType.DtImagenUsuario;
 import Logica.DataType.DtListaDeReproduccion;
 import Logica.DataType.DtUsuario;
 import Logica.DataType.DtVideo;
 import Logica.Enumerados.Privacidad;
 import Logica.Fabrica;
 import Logica.Interfaces.IAdmin;
+import Logica.Interfaces.IPersistenciaDeImagenes;
+import Presentacion.FuncionesImagenes;
 import Presentacion.ListaDeReproduccion.frmConsultaListaDeReproduccion;
 import Presentacion.ListaDeReproduccion.frmConsultaListaDeReproduccionEliminada;
 import Presentacion.Video.frmConsultaVideo;
@@ -30,7 +33,7 @@ public class frmConsultaUsuarioEliminado extends javax.swing.JDialog {
         this.setLocationRelativeTo(null);
         
         try {
-            cargarImagenEnJlabel(lbImagen, "");
+            FuncionesImagenes.cargarImagenEnJlabel(lbImagen, null);
             lbImagen.setEnabled(false);
             // obtiene la instancia de sistema
             sys = Fabrica.getInstancia().getIAdmin();
@@ -304,8 +307,21 @@ public class frmConsultaUsuarioEliminado extends javax.swing.JDialog {
         lbEmail.setText(u.getCorreo());
         lbFechaN.setText(new SimpleDateFormat("dd-MM-yyyy").format(u.getFechaNacimiento()));
         lbFechaElim.setText(new SimpleDateFormat("dd-MM-yyyy").format(u.getFechaEliminado()));
-        cargarImagenEnJlabel(lbImagen, u.getImagen());
         lbImagen.setEnabled(true);
+        try {
+            IPersistenciaDeImagenes pi = Fabrica.getInstancia().getIPersistenciaDeImagenes();
+            DtImagenUsuario dtiu = pi.find(u.getNickname());
+            if (dtiu == null){
+                FuncionesImagenes.cargarImagenPorDefectoEnJlabel(lbImagen);
+            }else{
+                FuncionesImagenes.cargarImagenEnJlabel(
+                        lbImagen,
+                        FuncionesImagenes.byteArrayToImage(dtiu.getImagen())
+                );
+            }
+        } catch (Exception e) {
+            JOptionPane.showMessageDialog(null, "Ha ocurrido un error al cargar la imagen del usuario\n" + e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
+        }
     }
     private void cargarLabelsConDatosDelCanal(DtCanal c){
         lbNombreCanal.setText(c.getNombre());
@@ -316,20 +332,6 @@ public class frmConsultaUsuarioEliminado extends javax.swing.JDialog {
             lbPrivacidad.setText("Privado");
         }
     }
-    private void cargarImagenEnJlabel(javax.swing.JLabel jLabelx, String Ruta){
-        jLabelx.setText(null);
-        if (Ruta == null || Ruta.isEmpty()){
-            Ruta = "Imagenes\\ukp.png";
-        }
-        // Carga la imagen a la variable de tipo Image
-        Image img = new ImageIcon(Ruta).getImage();
-        // Crea un ImageIcon a partir de la imagen (obtiene las dimenciones del jLbel y escala la imagen para que entre en el mismo)
-        ImageIcon icono = new ImageIcon(
-                img.getScaledInstance(jLabelx.getWidth(), jLabelx.getHeight(), Image.SCALE_SMOOTH)
-        );
-        // establece la imagen en el label
-        jLabelx.setIcon(icono);
-    }
     ///////////////////////////////////////////////////////////////////////////////////////////
     
     // Variables declaration - do not modify//GEN-BEGIN:variables
diff --git a/UyTube_estacion_de_trabajo/src/Presentacion/Usuario/frmModificarUsuario.java b/UyTube_estacion_de_trabajo/src/Presentacion/Usuario/frmModificarUsuario.java
index 59482c5f1d27ad44b4336f2b1ece309956384986..a3770e645dfa38e456427f807ef26082e2ff054c 100644
--- a/UyTube_estacion_de_trabajo/src/Presentacion/Usuario/frmModificarUsuario.java
+++ b/UyTube_estacion_de_trabajo/src/Presentacion/Usuario/frmModificarUsuario.java
@@ -1,10 +1,13 @@
 package Presentacion.Usuario;
 
 import Logica.DataType.DtCanal;
+import Logica.DataType.DtImagenUsuario;
 import Logica.DataType.DtUsuario;
 import Logica.Enumerados.Privacidad;
 import Logica.Fabrica;
 import Logica.Interfaces.IAdmin;
+import Logica.Interfaces.IPersistenciaDeImagenes;
+import Presentacion.FuncionesImagenes;
 import Presentacion.ListaDeReproduccion.frmModificarListaDeReproduccion;
 import Presentacion.Video.frmModificarVideo;
 import java.awt.Image;
@@ -36,11 +39,11 @@ public class frmModificarUsuario extends javax.swing.JDialog {
         btnListaReprodiccion.setEnabled(false);
         desactivarCampos();
         try {
-            cargarImagenEnJlabel(lbImg, "");
-
             // obtiene la instancia de sistema
             sys = Fabrica.getInstancia().getIAdmin();
 
+            FuncionesImagenes.cargarImagenEnJlabel(lbImg, null);
+
             // lista usuarios en el JList
             listarUsuarios(sys.listarUsuarios());
         } catch (Exception e) {
@@ -335,80 +338,6 @@ public class frmModificarUsuario extends javax.swing.JDialog {
         txtDescrpcion.setEnabled(true);
     }
 
-    private String seleccionarImagen() {
-        // Crea un JFileChooser
-        JFileChooser JFC = new JFileChooser();
-        // crea un filtro para aceptar solo algunas extensiones
-        FileNameExtensionFilter filtroImagen = new FileNameExtensionFilter("JPG", "JPEG", "PNG", "jpg", "jpeg", "png");
-        // Agrega el filtro al JFileChooser
-        JFC.setFileFilter(filtroImagen);
-
-        // archivo seleccionado
-        File archivo;
-        // para saber si se selecciono algo o se cancelo
-        int resultado;
-
-        while (true) {
-            // muestra el JFileChooser
-            resultado = JFC.showOpenDialog(this);
-
-            // Si pasa algo que no sea el aceptar
-            if (resultado != JFileChooser.APPROVE_OPTION) {
-                return "";
-            }
-
-            // obtiene el archivo seleccionado
-            archivo = JFC.getSelectedFile();
-
-            // Si se selecciono algun archivo
-            if (archivo != null) {
-                // obtiene la ruta del archivo
-                String rutaArchivo = archivo.getAbsolutePath();
-                // obtiene el archivo como imagen a partir de la ruta
-                Image img = new ImageIcon(rutaArchivo).getImage();
-
-                // verifica que tanto se deformará la imagen al mostrarla en un cuadrado
-                float deformacion;
-                if (img.getHeight(null) > img.getWidth(null)) {
-                    deformacion = img.getHeight(null) / img.getWidth(null);
-                } else {
-                    deformacion = img.getWidth(null) / img.getHeight(null);
-                }
-
-                if (deformacion < 1.3 && deformacion >= 1) {
-                    // si no se deforma demasiado
-                    // devuelve la ruta absoluta
-                    return rutaArchivo;
-                } else {
-                    // si se deforma demasiado, lo avisa al usuario para que escoja otra
-                    JOptionPane.showMessageDialog(null,
-                            "La imagen es demasiado alta o demasiado ancha.\n" + img.getWidth(null) + "x" + img.getHeight(null),
-                            "Problemas con la imagen",
-                            JOptionPane.WARNING_MESSAGE
-                    );
-                }
-            } else {
-                // sino devuelve un string vacio
-                return "";
-            }
-        }
-    }
-
-    private void cargarImagenEnJlabel(javax.swing.JLabel jLabelx, String Ruta) {
-        jLabelx.setText(null);
-        if (Ruta == null || Ruta.isEmpty()){
-            Ruta = "Imagenes\\ukp.png";
-        }
-        // Carga la imagen a la variable de tipo Image
-        Image img = new ImageIcon(Ruta).getImage();
-        // Crea un ImageIcon a partir de la imagen (obtiene las dimenciones del jLbel y escala la imagen para que entre en el mismo)
-        ImageIcon icono = new ImageIcon(
-                img.getScaledInstance(jLabelx.getWidth(), jLabelx.getHeight(), Image.SCALE_SMOOTH)
-        );
-        // establece la imagen en el label
-        jLabelx.setIcon(icono);
-    }
-
     private boolean validarNombres(String _nombre) {
         Pattern patronNombres = Pattern.compile("^([A-Za-zÑñÁáÉéÍíÓóÚú]+)\\s*([A-Za-zÑñÁáÉéÍíÓóÚú]+)\\s*([A-Za-zÑñÁáÉéÍíÓóÚú]+)$");
         Matcher mather = patronNombres.matcher(_nombre);
@@ -480,10 +409,21 @@ public class frmModificarUsuario extends javax.swing.JDialog {
                                     }
                                     DtCanal c = new DtCanal(0, txtNombreCanal.getText(), txtDescrpcion.getText(), priv);
                                     sys.modificarUsuarioYCanal(u, c);
-
+                                    
+                                    IPersistenciaDeImagenes pi = Fabrica.getInstancia().getIPersistenciaDeImagenes();
+                                    if (ruta == null || ruta.equals("")){
+                                        pi.remove(user.getNickname());
+                                    }else{
+                                        DtImagenUsuario dtiu = new DtImagenUsuario(
+                                                user.getNickname(), 
+                                                FuncionesImagenes.pathToByteArray(ruta), 
+                                                FuncionesImagenes.getNombreArchivo(ruta)
+                                        );
+                                        pi.edit(dtiu);
+                                    }
+                                    
                                     JOptionPane.showMessageDialog(null, "Datos modificados correctamente", "OK", JOptionPane.INFORMATION_MESSAGE);
                                     dispose();
-
                                 }
                             }
                         }
@@ -498,11 +438,16 @@ public class frmModificarUsuario extends javax.swing.JDialog {
     private void btnSeleccionarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSeleccionarActionPerformed
         //cargarImagen(lbImagen);
         String rutaAnterior = ruta;
-        ruta = seleccionarImagen();
+        ruta = FuncionesImagenes.seleccionarImagen();
         if (ruta.isEmpty()) {
             ruta = rutaAnterior;
         }
-        cargarImagenEnJlabel(lbImg, ruta);
+        FuncionesImagenes.cargarImagenEnJlabel(
+                lbImg, 
+                FuncionesImagenes.byteArrayToImage(
+                        FuncionesImagenes.pathToByteArray(ruta)
+                )
+        );
     }//GEN-LAST:event_btnSeleccionarActionPerformed
 
     private void btnListaReprodiccionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnListaReprodiccionActionPerformed
@@ -522,8 +467,20 @@ public class frmModificarUsuario extends javax.swing.JDialog {
         txtApellido.setText(u.getApellido());
         txtCorreo.setText(u.getCorreo());
         dcFecha.setDate(u.getFechaNacimiento());
-        cargarImagenEnJlabel(lbImg, u.getImagen());
-
+        try {
+            IPersistenciaDeImagenes pi = Fabrica.getInstancia().getIPersistenciaDeImagenes();
+            DtImagenUsuario dtiu = pi.find(u.getNickname());
+            if (dtiu == null){
+                FuncionesImagenes.cargarImagenPorDefectoEnJlabel(lbImg);
+            }else{
+                FuncionesImagenes.cargarImagenEnJlabel(
+                        lbImg,
+                        FuncionesImagenes.byteArrayToImage(dtiu.getImagen())
+                );
+            }
+        } catch (Exception e) {
+            JOptionPane.showMessageDialog(null, "Ha ocurrido un error al cargar la imagen del usuario\n" + e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
+        }
     }
 
     private void cargarDatosDelCanal(DtCanal c) {
@@ -577,7 +534,7 @@ public class frmModificarUsuario extends javax.swing.JDialog {
     private void btnQuitarImagenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnQuitarImagenActionPerformed
         // Quitar imagen
         ruta = "";
-        cargarImagenEnJlabel(lbImg, ruta);
+        FuncionesImagenes.cargarImagenPorDefectoEnJlabel(lbImg);
     }//GEN-LAST:event_btnQuitarImagenActionPerformed
 
 
diff --git a/UyTube_estacion_de_trabajo/src/Presentacion/frmPrincipal.java b/UyTube_estacion_de_trabajo/src/Presentacion/frmPrincipal.java
index 9227c567af181a7e10695e8aa67c2ef093f99a49..2591e3ea2f689fe85d55f9cbabb060ea4d3aa7c4 100644
--- a/UyTube_estacion_de_trabajo/src/Presentacion/frmPrincipal.java
+++ b/UyTube_estacion_de_trabajo/src/Presentacion/frmPrincipal.java
@@ -1,11 +1,19 @@
 package Presentacion;
 
+import Logica.DataType.DtImagenUsuario;
+import Logica.Fabrica;
 import Presentacion.Categoria.*;
 import Presentacion.ListaDeReproduccion.*;
 import Presentacion.Usuario.*;
 import Presentacion.Video.*;
 import java.awt.Image;
 import java.awt.Toolkit;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URISyntaxException;
+import java.net.URL;
 import javax.swing.ImageIcon;
 import javax.swing.JOptionPane;
     
@@ -23,7 +31,11 @@ public class frmPrincipal extends javax.swing.JFrame {
         
         // carga la imagen de fondo
         this.lbFondo.setText(null);
-        Image img3 = new ImageIcon("Imagenes/des.jpeg").getImage();
+        // originalmente se usaba la siguiente linea: 
+        //Image img3 = new ImageIcon("Imagenes/des.jpeg").getImage();
+        // Pero para cargar la imagen que esta en el .jar se usa esta:
+        URL path = this.getClass().getClassLoader().getResource("Imagenes/des.jpeg");
+        Image img3 = new ImageIcon(path).getImage();
         ImageIcon img4 = new ImageIcon(img3.getScaledInstance(lbFondo.getWidth(), lbFondo.getHeight(), Image.SCALE_SMOOTH));
         lbFondo.setIcon(img4);
         
diff --git a/UyTube_logica/Imagenes/perfiles/JotaJota96.JPG b/UyTube_logica/Imagenes/perfiles/JotaJota96.JPG
deleted file mode 100644
index 3efaaeaebf1d20cb7f712514b0cfc0096f6b0007..0000000000000000000000000000000000000000
Binary files a/UyTube_logica/Imagenes/perfiles/JotaJota96.JPG and /dev/null differ
diff --git a/UyTube_logica/Imagenes/perfiles/LuC31G.jpg b/UyTube_logica/Imagenes/perfiles/LuC31G.jpg
deleted file mode 100644
index f22efc5908db0af0594d76d75ae3f89ebdff93a6..0000000000000000000000000000000000000000
Binary files a/UyTube_logica/Imagenes/perfiles/LuC31G.jpg and /dev/null differ
diff --git a/UyTube_logica/Imagenes/perfiles/MCBolso.jpg b/UyTube_logica/Imagenes/perfiles/MCBolso.jpg
deleted file mode 100644
index 35469b84ed023de4e5a7581095434bcbf69719d1..0000000000000000000000000000000000000000
Binary files a/UyTube_logica/Imagenes/perfiles/MCBolso.jpg and /dev/null differ
diff --git a/UyTube_logica/Imagenes/perfiles/camilillo15.jpg b/UyTube_logica/Imagenes/perfiles/camilillo15.jpg
deleted file mode 100644
index dc36ba95eecc24c956cbaf03f53dccda2f9317bb..0000000000000000000000000000000000000000
Binary files a/UyTube_logica/Imagenes/perfiles/camilillo15.jpg and /dev/null differ
diff --git a/UyTube_logica/Imagenes/perfiles/jarrieta31.jpg b/UyTube_logica/Imagenes/perfiles/jarrieta31.jpg
deleted file mode 100644
index d54ec04f4eee56374821fcfb9c9928a761cbc10b..0000000000000000000000000000000000000000
Binary files a/UyTube_logica/Imagenes/perfiles/jarrieta31.jpg and /dev/null differ
diff --git a/UyTube_logica/nbproject/project.properties b/UyTube_logica/nbproject/project.properties
index 072bb3f216a1ee0d1875c57d3d13595dc50348a9..9665986543f9789b662f177c0338cf8f4c9111df 100644
--- a/UyTube_logica/nbproject/project.properties
+++ b/UyTube_logica/nbproject/project.properties
@@ -59,7 +59,7 @@ javadoc.splitindex=true
 javadoc.use=true
 javadoc.version=false
 javadoc.windowtitle=
-main.class=Presentacion.frmPrincipal
+main.class=Logica.DatosDePrueba
 manifest.file=manifest.mf
 meta.inf.dir=${src.dir}/META-INF
 mkdist.disabled=false
diff --git a/UyTube_logica/src/JPAControllerClasses/ImagenUsuarioJpaController.java b/UyTube_logica/src/JPAControllerClasses/ImagenUsuarioJpaController.java
new file mode 100644
index 0000000000000000000000000000000000000000..b2b07a95dfbb7ca3c066411f18820de47859ffa8
--- /dev/null
+++ b/UyTube_logica/src/JPAControllerClasses/ImagenUsuarioJpaController.java
@@ -0,0 +1,148 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package JPAControllerClasses;
+
+import JPAControllerClasses.exceptions.NonexistentEntityException;
+import JPAControllerClasses.exceptions.PreexistingEntityException;
+import Logica.Clases.ImagenUsuario;
+import java.io.Serializable;
+import java.util.List;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Query;
+import javax.persistence.EntityNotFoundException;
+import javax.persistence.Persistence;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Root;
+
+/**
+ *
+ * @author Juan
+ */
+public class ImagenUsuarioJpaController implements Serializable {
+
+    public ImagenUsuarioJpaController() {
+        this.emf = Persistence.createEntityManagerFactory(NombreManejador.getNombreManejador());
+    }
+    public ImagenUsuarioJpaController(EntityManagerFactory emf) {
+        this.emf = emf;
+    }
+    private EntityManagerFactory emf = null;
+
+    public EntityManager getEntityManager() {
+        return emf.createEntityManager();
+    }
+
+    public void create(ImagenUsuario imagenUsuario) throws PreexistingEntityException, Exception {
+        EntityManager em = null;
+        try {
+            em = getEntityManager();
+            em.getTransaction().begin();
+            em.persist(imagenUsuario);
+            em.getTransaction().commit();
+        } catch (Exception ex) {
+            if (findImagenUsuario(imagenUsuario.getNickname()) != null) {
+                throw new PreexistingEntityException("ImagenUsuario " + imagenUsuario + " already exists.", ex);
+            }
+            throw ex;
+        } finally {
+            if (em != null) {
+                em.close();
+            }
+        }
+    }
+
+    public void edit(ImagenUsuario imagenUsuario) throws NonexistentEntityException, Exception {
+        EntityManager em = null;
+        try {
+            em = getEntityManager();
+            em.getTransaction().begin();
+            imagenUsuario = em.merge(imagenUsuario);
+            em.getTransaction().commit();
+        } catch (Exception ex) {
+            String msg = ex.getLocalizedMessage();
+            if (msg == null || msg.length() == 0) {
+                String id = imagenUsuario.getNickname();
+                if (findImagenUsuario(id) == null) {
+                    throw new NonexistentEntityException("The imagenUsuario with id " + id + " no longer exists.");
+                }
+            }
+            throw ex;
+        } finally {
+            if (em != null) {
+                em.close();
+            }
+        }
+    }
+
+    public void destroy(String id) throws NonexistentEntityException {
+        EntityManager em = null;
+        try {
+            em = getEntityManager();
+            em.getTransaction().begin();
+            ImagenUsuario imagenUsuario;
+            try {
+                imagenUsuario = em.getReference(ImagenUsuario.class, id);
+                imagenUsuario.getNickname();
+            } catch (EntityNotFoundException enfe) {
+                throw new NonexistentEntityException("The imagenUsuario with id " + id + " no longer exists.", enfe);
+            }
+            em.remove(imagenUsuario);
+            em.getTransaction().commit();
+        } finally {
+            if (em != null) {
+                em.close();
+            }
+        }
+    }
+
+    public List<ImagenUsuario> findImagenUsuarioEntities() {
+        return findImagenUsuarioEntities(true, -1, -1);
+    }
+
+    public List<ImagenUsuario> findImagenUsuarioEntities(int maxResults, int firstResult) {
+        return findImagenUsuarioEntities(false, maxResults, firstResult);
+    }
+
+    private List<ImagenUsuario> findImagenUsuarioEntities(boolean all, int maxResults, int firstResult) {
+        EntityManager em = getEntityManager();
+        try {
+            CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
+            cq.select(cq.from(ImagenUsuario.class));
+            Query q = em.createQuery(cq);
+            if (!all) {
+                q.setMaxResults(maxResults);
+                q.setFirstResult(firstResult);
+            }
+            return q.getResultList();
+        } finally {
+            em.close();
+        }
+    }
+
+    public ImagenUsuario findImagenUsuario(String id) {
+        EntityManager em = getEntityManager();
+        try {
+            return em.find(ImagenUsuario.class, id);
+        } finally {
+            em.close();
+        }
+    }
+
+    public int getImagenUsuarioCount() {
+        EntityManager em = getEntityManager();
+        try {
+            CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
+            Root<ImagenUsuario> rt = cq.from(ImagenUsuario.class);
+            cq.select(em.getCriteriaBuilder().count(rt));
+            Query q = em.createQuery(cq);
+            return ((Long) q.getSingleResult()).intValue();
+        } finally {
+            em.close();
+        }
+    }
+    
+}
diff --git a/UyTube_logica/src/Logica/Clases/ImagenUsuario.java b/UyTube_logica/src/Logica/Clases/ImagenUsuario.java
new file mode 100644
index 0000000000000000000000000000000000000000..150875d982ecff937d578eb232aa87c403f69bdb
--- /dev/null
+++ b/UyTube_logica/src/Logica/Clases/ImagenUsuario.java
@@ -0,0 +1,75 @@
+package Logica.Clases;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "ImagenUsuario")
+public class ImagenUsuario implements Serializable {
+    @Id
+    @Column(name = "id")
+    private String nickname;
+    
+    @Lob
+    @Column(name = "imagen")
+    private byte[] imagen;
+    
+    @Column(name = "nombreArchivo")
+    private String nombreArchivo;
+    
+    //******************** Constructores ********************
+    public ImagenUsuario() {
+    }
+
+    public ImagenUsuario(String nickname, byte[] imagen, String nombreArchivo) {
+        this.nickname = nickname;
+        this.imagen = imagen;
+        this.nombreArchivo = nombreArchivo;
+    }
+
+    //***************** Getters y setters *****************
+    public String getNickname() {
+        return nickname;
+    }
+
+    public void setNickname(String nickname) {
+        this.nickname = nickname;
+    }
+
+    public byte[] getImagen() {
+        return imagen;
+    }
+
+    public void setImagen(byte[] imagen) {
+        this.imagen = imagen;
+    }
+
+    public String getNombreArchivo() {
+        return nombreArchivo;
+    }
+
+    public void setNombreArchivo(String nombreArchivo) {
+        this.nombreArchivo = nombreArchivo;
+    }
+    
+    public String getExtension(){
+        String ret = "";
+        // recorre desde el final hacia el principio hasta encontrar un '.'  extrayendo la extension del archivo
+        for (int i = this.nombreArchivo.length() - 1; i >= 0; i--) {
+            if (this.nombreArchivo.charAt(i) == '.') {
+                break;
+            }
+            ret = this.nombreArchivo.charAt(i) + ret;
+        }
+        // si la extension obtenida es igual al nombre del archivo, entonces no se encontro ningun punto y el archivo no tienee extension
+        if (ret.equals(this.nombreArchivo)) {
+            return "";
+        }
+        // sino devuelve la extension obtenida
+        return ret;
+    }
+}
diff --git a/UyTube_logica/src/Logica/Controladores/CPersistenciaDeImagenes.java b/UyTube_logica/src/Logica/Controladores/CPersistenciaDeImagenes.java
new file mode 100644
index 0000000000000000000000000000000000000000..eefe9a0ceb71614d9bc3f8581bff615d6fabc0a7
--- /dev/null
+++ b/UyTube_logica/src/Logica/Controladores/CPersistenciaDeImagenes.java
@@ -0,0 +1,120 @@
+package Logica.Controladores;
+
+import JPAControllerClasses.ImagenUsuarioJpaController;
+import JPAControllerClasses.exceptions.NonexistentEntityException;
+import Logica.Clases.ImagenUsuario;
+import Logica.DataType.DtImagenUsuario;
+import Logica.Interfaces.IPersistenciaDeImagenes;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.JarURLConnection;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javafx.scene.effect.ImageInput;
+import javax.swing.ImageIcon;
+
+public class CPersistenciaDeImagenes implements IPersistenciaDeImagenes {
+
+    private static CPersistenciaDeImagenes instancia = null;
+
+    // Constructor
+    private CPersistenciaDeImagenes() {
+    }
+
+    // Singleton
+    public static CPersistenciaDeImagenes getInstancia() {
+        if (instancia == null) {
+            instancia = new CPersistenciaDeImagenes();
+        }
+        return instancia;
+    }
+
+    //****************************************************************************************
+    @Override
+    public DtImagenUsuario find(String id) throws RuntimeException {
+        if ( ! exists(id)){
+            return getDefaultImage();
+        }
+        try {
+            ImagenUsuario iu = new ImagenUsuarioJpaController().findImagenUsuario(id);
+            return new DtImagenUsuario(iu.getNickname(), iu.getImagen(), iu.getNombreArchivo());
+        } catch (Exception ex) {
+            Logger.getLogger(CPersistenciaDeImagenes.class.getName()).log(Level.SEVERE, null, ex);
+            throw new RuntimeException("Algo falló al intentar consultar la imagen\n" + ex.getMessage());
+        }
+    }
+
+    @Override
+    public void create(DtImagenUsuario iu) throws RuntimeException {
+        if (exists(iu.getNickname())) {
+            edit(iu);
+            return;
+        }
+        try {
+            new ImagenUsuarioJpaController().create(
+                    new ImagenUsuario(iu.getNickname(), iu.getImagen(), iu.getNombreArchivo())
+            );
+        } catch (Exception ex) {
+            Logger.getLogger(CPersistenciaDeImagenes.class.getName()).log(Level.SEVERE, null, ex);
+            throw new RuntimeException("Algo falló al intentar guardar la imagen\n" + ex.getMessage());
+        }
+    }
+
+    //new ImagenUsuarioJpaController().
+    @Override
+    public void edit(DtImagenUsuario iu) throws RuntimeException {
+        if (!exists(iu.getNickname())) {
+            create(iu);
+            return;
+        }
+        try {
+            new ImagenUsuarioJpaController().edit(
+                    new ImagenUsuario(iu.getNickname(), iu.getImagen(), iu.getNombreArchivo())
+            );
+        } catch (Exception ex) {
+            Logger.getLogger(CPersistenciaDeImagenes.class.getName()).log(Level.SEVERE, null, ex);
+            throw new RuntimeException("Algo falló al intentar modificar la imagen\n" + ex.getMessage());
+        }
+    }
+
+    @Override
+    public void remove(String id) throws RuntimeException {
+        try {
+            new ImagenUsuarioJpaController().destroy(id);
+        } catch (NonexistentEntityException ex) {
+            Logger.getLogger(CPersistenciaDeImagenes.class.getName()).log(Level.SEVERE, null, ex);
+            throw new RuntimeException("Algo falló al intentar remover la imagen\n" + ex.getMessage());
+        }
+    }
+
+    @Override
+    public boolean exists(String id) throws RuntimeException {
+        return new ImagenUsuarioJpaController().findImagenUsuario(id) != null;
+    }
+
+    @Override
+    public DtImagenUsuario getDefaultImage() {
+        try {
+            InputStream in = getClass().getResourceAsStream("/imagenes/ukp.png");
+            //File f = new File(getClass().getResource("/imagenes/ukp.png").getFile());
+            //File f = new File(connection.getJarFileURL().toURI()); //asociamos el archivo fisico
+            //InputStream is = new FileInputStream(f); //lo abrimos. Lo importante es que sea un InputStream
+            byte[] buffer = new byte[(int) in.available()]; //creamos el buffer
+            int readers = in.read(buffer); //leemos el archivo al buffer
+            
+            return new DtImagenUsuario("", buffer, "ukp.png");
+            
+        } catch (IOException e) {
+            throw new RuntimeException(e.getMessage());
+        }
+        
+        //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        
+        //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+}
diff --git a/UyTube_logica/src/Logica/Controladores/CUsuario.java b/UyTube_logica/src/Logica/Controladores/CUsuario.java
index 4d6905db1c6ec8cf8dabccec5a4e645e4895237c..c88779de1ce208dfafc61d6b5c605e1a99d4f93f 100644
--- a/UyTube_logica/src/Logica/Controladores/CUsuario.java
+++ b/UyTube_logica/src/Logica/Controladores/CUsuario.java
@@ -114,7 +114,7 @@ public class CUsuario implements IUsuario {
         }
         usuarioActual.agregarVideoALista(idLista, idVideoSeleccionado, usuarioSeleccionado);
     }
-
+    
     @Override
     public void altaComentario(DtComentario dtCom) {
         if (usuarioActual == null){
@@ -762,9 +762,12 @@ public class CUsuario implements IUsuario {
             usuarioSeleccionado = usuarioActual;
         }else{
             usuarioSeleccionado = obtenerUsuarios().get(nickname);
-        }
-        if (usuarioSeleccionado == null){
-            throw new RuntimeException("No se encontro ningun usuario con ese nickname");
+            if (usuarioSeleccionado == null){
+                throw new RuntimeException("No se encontro ningun usuario con ese nickname");
+            }
+            if (usuarioSeleccionado.obtenerCanal().getPrivacidad() == Privacidad.PRIVADO){
+                throw new RuntimeException("El canal seleccionado es privado");
+            }
         }
         return usuarioSeleccionado.getDT();
     }
@@ -776,6 +779,11 @@ public class CUsuario implements IUsuario {
             this.seleccionarUsuario(nick);
         }
         DtListaDeReproduccion ret = usuarioSeleccionado.obtenerListaDeReproduccion(idLista);
+        if (ret.getPrivacidad() == Privacidad.PRIVADO){
+            if ( ! elUsuarioSeleccionadoEsElUsuarioActual()){
+                throw new RuntimeException("La lista de reproduccion seleccionada es privada");
+            }
+        }
         idListaSeleccionada = idLista;
         return ret;
     }
@@ -787,6 +795,11 @@ public class CUsuario implements IUsuario {
             this.seleccionarUsuario(nick);
         }
         DtVideo ret = usuarioSeleccionado.obtenerVideoDeCanal(idVideo);
+        if (ret.getPrivacidad() == Privacidad.PRIVADO){
+            if ( ! elUsuarioSeleccionadoEsElUsuarioActual()){
+                throw new RuntimeException("El video seleccionado es privado");
+            }
+        }
         idVideoSeleccionado = idVideo;
         return ret;
     }
diff --git a/UyTube_logica/src/Logica/DataType/DtImagenUsuario.java b/UyTube_logica/src/Logica/DataType/DtImagenUsuario.java
new file mode 100644
index 0000000000000000000000000000000000000000..fbd5a390f5f2fda4c9a60c2d1acce73daf3781a6
--- /dev/null
+++ b/UyTube_logica/src/Logica/DataType/DtImagenUsuario.java
@@ -0,0 +1,49 @@
+package Logica.DataType;
+
+public class DtImagenUsuario {
+
+    private String nickname;
+    private byte[] imagen;
+    private String nombreArchivo;
+
+    public DtImagenUsuario(String nickname, byte[] imagen, String nombreArchivo) {
+        this.nickname = nickname;
+        this.imagen = imagen;
+        this.nombreArchivo = nombreArchivo;
+    }
+
+    public String getNickname() {
+        return nickname;
+    }
+
+    public byte[] getImagen() {
+        return imagen;
+    }
+
+    public String getNombreArchivo() {
+        return nombreArchivo;
+    }
+    
+    public String getExtension(){
+        String ret = "";
+        // recorre desde el final hacia el principio hasta encontrar un '.'  extrayendo la extension del archivo
+        for (int i = this.nombreArchivo.length() - 1; i >= 0; i--) {
+            if (this.nombreArchivo.charAt(i) == '.') {
+                break;
+            }
+            ret = this.nombreArchivo.charAt(i) + ret;
+        }
+        // si la extension obtenida es igual al nombre del archivo, entonces no se encontro ningun punto y el archivo no tienee extension
+        if (ret.equals(this.nombreArchivo)) {
+            return "";
+        }
+        // sino devuelve la extension obtenida
+        return ret;
+    }
+
+    @Override
+    public String toString() {
+        return "DtImagenUsuario{" + "nickname=" + nickname + ", imagen=" + imagen.length + ", nombreArchivo=" + nombreArchivo + '}';
+    }
+    
+}
diff --git a/UyTube_logica/src/Logica/DatosDePrueba.java b/UyTube_logica/src/Logica/DatosDePrueba.java
index 1ce8eec8764429f938b2108d86a3b158c6c27437..8dfe312c33b37007756994c3bccaa8e3e5af11bd 100644
--- a/UyTube_logica/src/Logica/DatosDePrueba.java
+++ b/UyTube_logica/src/Logica/DatosDePrueba.java
@@ -1,7 +1,5 @@
 package Logica;
 
-import Logica.DataType.DtValoracion;
-import Logica.Enumerados.TipoValoracion;
 import Logica.Interfaces.IAdmin;
 import Logica.Interfaces.IUsuario;
 import java.util.ArrayList;
@@ -11,10 +9,15 @@ public class DatosDePrueba {
     private static IUsuario usuSys = null;
     
     public static void main(String[] args) {
-        Fabrica f = Fabrica.getInstancia();
-        usuSys = f.getIUsuario();
+        String mensajeEasterEgg = "Hola! gracias por ejecutarme, pero solo soy una libreria";
+        //Fabrica f = Fabrica.getInstancia();
         try {
-            
+            /*
+            usuSys = f.getIUsuario();
+            adminSys = f.getIAdmin();
+            */
+            javax.swing.JOptionPane.showMessageDialog(null, mensajeEasterEgg,"", javax.swing.JOptionPane.INFORMATION_MESSAGE);
+            System.out.println(mensajeEasterEgg);
         } catch (Exception e) {
             System.out.println("//////////////////////////");
             System.out.println(e.getMessage());
diff --git a/UyTube_logica/src/Logica/Fabrica.java b/UyTube_logica/src/Logica/Fabrica.java
index 2405684b805827ab1ced98afd8aaaaf5b30a44ce..96a14c94e5cd54450845b180a06a0f1d9a558b1b 100644
--- a/UyTube_logica/src/Logica/Fabrica.java
+++ b/UyTube_logica/src/Logica/Fabrica.java
@@ -1,8 +1,10 @@
 package Logica;
 
 import Logica.Controladores.CAdmin;
+import Logica.Controladores.CPersistenciaDeImagenes;
 import Logica.Controladores.CUsuario;
 import Logica.Interfaces.IAdmin;
+import Logica.Interfaces.IPersistenciaDeImagenes;
 import Logica.Interfaces.IUsuario;
 
 
@@ -30,4 +32,9 @@ public class Fabrica {
     public IUsuario getIUsuario(){
         return CUsuario.getInstancia();
     }
+    
+    /* Crea una unicia instancia del controlador CPersistenciaDeImagenes */
+    public IPersistenciaDeImagenes getIPersistenciaDeImagenes(){
+        return CPersistenciaDeImagenes.getInstancia();
+    }
 }
diff --git a/UyTube_logica/src/Logica/Interfaces/IPersistenciaDeImagenes.java b/UyTube_logica/src/Logica/Interfaces/IPersistenciaDeImagenes.java
new file mode 100644
index 0000000000000000000000000000000000000000..ea6350dcc14d978590a719b86ff948cf91324c39
--- /dev/null
+++ b/UyTube_logica/src/Logica/Interfaces/IPersistenciaDeImagenes.java
@@ -0,0 +1,53 @@
+package Logica.Interfaces;
+
+import Logica.DataType.DtImagenUsuario;
+
+/**
+ * Esta interfaz permite realizar acciones CRUD de las imágenes de perfil de los
+ * usuarios
+ *
+ * @author Juan
+ */
+public interface IPersistenciaDeImagenes {
+
+    /**
+     * Devuelve los datos de la imagen del usuario con ese ID
+     *
+     * @param id ID del usuario del cual se quiere obtener la imagen
+     * @return Datos del usuario si existe, o null si no se encontro
+     */
+    public DtImagenUsuario find(String id) throws RuntimeException;
+
+    /**
+     * Persiste una nueva imagen de usuario
+     *
+     * @param iu Datos de la imagen del usuario
+     */
+    public void create(DtImagenUsuario iu) throws RuntimeException;
+
+    /**
+     * Modifica los datos de la imagen de usuario
+     *
+     * @param iu Datos de la imagen del usuario
+     */
+    public void edit(DtImagenUsuario iu) throws RuntimeException;
+
+    /**
+     * Elimina la imagen del usuario
+     *
+     * @param id ID del usuario
+     */
+    public void remove(String id) throws RuntimeException;
+
+    /**
+     * Comprueba si el usuario con el ID indicado posee imagen de perfil
+     * persistida
+     *
+     * @param id ID del usuario
+     * @return true si el usuario tiene una imagen de perfil persistida
+     */
+    public boolean exists(String id) throws RuntimeException;
+    
+    public DtImagenUsuario getDefaultImage();
+    
+}
diff --git a/UyTube_logica/src/META-INF/persistence.xml b/UyTube_logica/src/META-INF/persistence.xml
index aa020d7a75891bd8952307dfcedf3e57ed4a037b..062a3e0d5ecbfc8272ae8459f14997f9a9547ec7 100644
--- a/UyTube_logica/src/META-INF/persistence.xml
+++ b/UyTube_logica/src/META-INF/persistence.xml
@@ -12,6 +12,7 @@
     <class>Logica.Clases.Usuario</class>
     <class>Logica.Clases.Valoracion</class>
     <class>Logica.Clases.Video</class>
+    <class>Logica.Clases.ImagenUsuario</class>
     <properties>
       <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/UyTube"/>
       <property name="javax.persistence.jdbc.user" value="postgres"/>
diff --git a/UyTube_logica/src/imagenes/ukp.png b/UyTube_logica/src/imagenes/ukp.png
new file mode 100644
index 0000000000000000000000000000000000000000..af5b18b0d40eb11485bc8789da61205eb0536253
Binary files /dev/null and b/UyTube_logica/src/imagenes/ukp.png differ
diff --git a/UyTube_logica/ukp.png b/UyTube_logica/ukp.png
new file mode 100644
index 0000000000000000000000000000000000000000..d95719e7867f00087bc4798aacd937eb5237f1bd
Binary files /dev/null and b/UyTube_logica/ukp.png differ
diff --git a/UyTube_web/libreria/UyTube_logica.jar b/UyTube_web/libreria/UyTube_logica.jar
index c9c9e50bd4f8fe8e5751d49d04ace1b1d9dd1c02..cb2f4ed6ea79fef7158ecddef00f8c964845c9c3 100644
Binary files a/UyTube_web/libreria/UyTube_logica.jar and b/UyTube_web/libreria/UyTube_logica.jar differ
diff --git a/UyTube_web/src/java/Funciones/Funciones.java b/UyTube_web/src/java/Funciones/Funciones.java
index d423f1b7e7d9e2f122768885e6f8f9fcc5a6b4a9..2e579e3da26ad60ff9dc6bde4d1dc73a7b923228 100644
--- a/UyTube_web/src/java/Funciones/Funciones.java
+++ b/UyTube_web/src/java/Funciones/Funciones.java
@@ -1,13 +1,16 @@
 package Funciones;
 
+import java.util.Map;
+
 /**
  *
  * @author Juan
  */
 public class Funciones {
-    
+
     /**
      * Extrae el ID del video
+     *
      * @param URLYoutube URL del video de Youtube
      * @return ID del video
      */
@@ -16,28 +19,30 @@ public class Funciones {
         String idYoutube = "";
         String urlDT = URLYoutube;
         int i = 0;
-        i = URLYoutube.indexOf("v=") +2;
-        
+        i = URLYoutube.indexOf("v=") + 2;
+
         for (; i < urlDT.length(); i++) {
-            if (urlDT.charAt(i)=='&') {
+            if (urlDT.charAt(i) == '&') {
                 break;
             }
             idYoutube += urlDT.charAt(i);
         }
         return idYoutube;
     }
-    
+
     /**
      * Enlace para embeber video en una página
+     *
      * @param idYoutube ID del video de Youtube
      * @return En lace para embeber video
      */
     public static String obtenerEnlaceEmbebido(String idYoutube) {
         return "https://www.youtube.com/embed/" + idYoutube;
     }
-    
+
     /**
      * Obtiene la url de la miniatura del video original en YouTube
+     *
      * @param idYoutube ID del video de Youtube
      * @param tamanio Tamaño de la imagen [1 a 4]
      * @return URL de la miniatura del video
@@ -50,7 +55,7 @@ public class Funciones {
         http://img.youtube.com/vi/VideoID/sddefault.jpg
          */
         String strTamanio = "/default.jpg";
-        switch (tamanio){
+        switch (tamanio) {
             case 1:
                 strTamanio = "/default.jpg";
                 break;
@@ -72,4 +77,65 @@ public class Funciones {
         java.sql.Date ret = new java.sql.Date(today.getTime());
         return ret;
     }
+
+    public static void showLog(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) {
+        try {
+            String inicio = "-------- " + request.getMethod() + " " + request.getRequestURI() + " --------";
+            System.out.println(inicio);
+
+            if (request.getParameterMap().size() > 0) {
+                System.out.println("Atributos:");
+                for (Map.Entry<String, String[]> it : request.getParameterMap().entrySet()) {
+                    if (it.getValue().length > 0) {
+                        for (int i = 0; i < it.getValue().length; i++) {
+                            System.out.println(it.getKey() + ": '" + it.getValue()[i] + "'");
+                        }
+                    } else {
+                        System.out.println(it.getKey() + ": '''");
+                    }
+                }
+            } else {
+                System.out.println("No hay parametros");
+            }
+            for (int i = 0; i < inicio.length(); i++) {
+                System.out.print("-");
+            }
+            System.out.println("");
+        } catch (Exception e) {
+            System.out.println("---- Error al intentar mostrar el log ----");
+            System.out.println(e.getMessage());
+            System.out.println("------------------------------------------");
+        }
+    }
+
+    public static void showLog(String titulo, String log) {
+        try {
+            if (titulo == null) {
+                titulo = "No hay titulo";
+            }
+            if (log == null) {
+                log = "No hay mensaje";
+            }
+            titulo = "---- " + titulo + " ----";
+
+            System.out.println(titulo);
+            System.out.println(log);
+            for (int i = 0; i < titulo.length(); i++) {
+                System.out.print("-");
+            }
+            System.out.println("");
+        } catch (Exception e) {
+            System.out.println("");
+            System.out.println("///// No se pudo mostrar el log ////");
+            System.out.println("");
+        }
+    }
+
+    public static void showLog(Exception e) {
+        System.out.println();
+        System.out.println("//////////// Exception ////////////");
+        System.out.println(e.getMessage());
+        System.out.println("///////////////////////////////////");
+    }
+
 }
diff --git a/UyTube_web/src/java/com/uytube/AgregarVideoAListaReproduccion.java b/UyTube_web/src/java/com/uytube/AgregarVideoAListaReproduccion.java
index 98c8d82423ff642591dfab7a17f6e778f2930123..2bfea0bc19d1cb75d139fd5ab919486b7e78551f 100644
--- a/UyTube_web/src/java/com/uytube/AgregarVideoAListaReproduccion.java
+++ b/UyTube_web/src/java/com/uytube/AgregarVideoAListaReproduccion.java
@@ -9,7 +9,6 @@ import Logica.DataType.DtUsuario;
 import Logica.Fabrica;
 import Logica.Interfaces.IUsuario;
 import java.io.IOException;
-import java.io.PrintWriter;
 import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
@@ -26,8 +25,20 @@ public class AgregarVideoAListaReproduccion extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
+        Funciones.Funciones.showLog(request, response);
         try {
             IUsuario sys = Fabrica.getInstancia().getIUsuario();
+            
+            if (!sys.sesionIniciada()){
+                String msj = "No puedes acceder a esta página";
+                Funciones.Funciones.showLog("Acceso denegado", msj);
+                RequestDispatcher rd; //objeto para despachar
+                request.setAttribute("mensajeError", msj);
+                rd = request.getRequestDispatcher("/401.jsp");
+                rd.forward(request, response);
+                return;
+            }
+            
             String pIDVideo = request.getParameter("idvideo");
             String pIDLista = request.getParameter("idlista");
             int IDVideo = Integer.valueOf(pIDVideo);
@@ -40,9 +51,7 @@ public class AgregarVideoAListaReproduccion extends HttpServlet {
 
             response.sendRedirect("lista-consultar?id="+IDLista);
         } catch (Exception e) {
-            System.out.println("---- Exception ----");
-            System.out.println(e.getMessage());
-            System.out.println("-------------------");
+            Funciones.Funciones.showLog(e);
             RequestDispatcher rd; //objeto para despachar
             request.setAttribute("mensajeError", e.getMessage());
             rd = request.getRequestDispatcher("/404.jsp");
diff --git a/UyTube_web/src/java/com/uytube/AltaListaReproduccion.java b/UyTube_web/src/java/com/uytube/AltaListaReproduccion.java
index 3698c13332d793d37a4b77fc3d9325224fdab7d5..4b5aacf3c6bd6dc9ad215feef9f95877bf3ad277 100644
--- a/UyTube_web/src/java/com/uytube/AltaListaReproduccion.java
+++ b/UyTube_web/src/java/com/uytube/AltaListaReproduccion.java
@@ -12,7 +12,6 @@ import Logica.Enumerados.TipoListaDeReproduccion;
 import Logica.Fabrica;
 import Logica.Interfaces.IUsuario;
 import java.io.IOException;
-import java.io.PrintWriter;
 import java.util.ArrayList;
 import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletException;
@@ -38,9 +37,20 @@ public class AltaListaReproduccion extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
-
+        Funciones.Funciones.showLog(request, response);
         try {
             IUsuario sys = Fabrica.getInstancia().getIUsuario();
+            
+            if (!sys.sesionIniciada()){
+                String msj = "No puedes acceder a esta página";
+                Funciones.Funciones.showLog("Acceso denegado", msj);
+                RequestDispatcher rd; //objeto para despachar
+                request.setAttribute("mensajeError", msj);
+                rd = request.getRequestDispatcher("/401.jsp");
+                rd.forward(request, response);
+                return;
+            }
+            
             boolean sesionIniciada = sys.sesionIniciada();
             ArrayList<String> cate = sys.listarCategorias();
 
@@ -51,9 +61,7 @@ public class AltaListaReproduccion extends HttpServlet {
             rd = request.getRequestDispatcher("/AltaListaReproduccion.jsp");
             rd.forward(request, response);
         } catch (Exception e) {
-            System.out.println("---- Exception ----");
-            System.out.println(e.getMessage());
-            System.out.println("-------------------");
+            Funciones.Funciones.showLog(e);
             RequestDispatcher rd; //objeto para despachar
             request.setAttribute("mensajeError", e.getMessage());
             rd = request.getRequestDispatcher("/404.jsp");
@@ -73,12 +81,23 @@ public class AltaListaReproduccion extends HttpServlet {
     @Override
     protected void doPost(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
+        Funciones.Funciones.showLog(request, response);
         try {
+            IUsuario sys = Fabrica.getInstancia().getIUsuario();
+            
+            if (!sys.sesionIniciada()){
+                String msj = "No puedes acceder a esta página";
+                Funciones.Funciones.showLog("Acceso denegado", msj);
+                RequestDispatcher rd; //objeto para despachar
+                request.setAttribute("mensajeError", msj);
+                rd = request.getRequestDispatcher("/401.jsp");
+                rd.forward(request, response);
+                return;
+            }
+            
             String pNombreLista = request.getParameter("nombreL");
             String pPrivacidad = request.getParameter("privacidad_1");
             String pCategoria = request.getParameter("categoria");
-
-            IUsuario sys = Fabrica.getInstancia().getIUsuario();
             
             DtUsuario usu = sys.obtenerUsuarioActual();
             
@@ -103,9 +122,7 @@ public class AltaListaReproduccion extends HttpServlet {
             response.sendRedirect("lista-consultar?id=" + idNuevaLista);
             
         } catch (Exception e) {
-            System.out.println("---- Exception ----");
-            System.out.println(e.getMessage());
-            System.out.println("-------------------");
+            Funciones.Funciones.showLog(e);
             RequestDispatcher rd; //objeto para despachar
             request.setAttribute("mensajeError", e.getMessage());
             rd = request.getRequestDispatcher("/404.jsp");
diff --git a/UyTube_web/src/java/com/uytube/AltaUsuario.java b/UyTube_web/src/java/com/uytube/AltaUsuario.java
index 0331399b5666e064af922a9c8f9ee4a14391e55c..1526b110b1877a808043e70abb2a763f9aa74218 100644
--- a/UyTube_web/src/java/com/uytube/AltaUsuario.java
+++ b/UyTube_web/src/java/com/uytube/AltaUsuario.java
@@ -6,28 +6,27 @@
 package com.uytube;
 
 import Logica.DataType.DtCanal;
+import Logica.DataType.DtImagenUsuario;
 import Logica.DataType.DtUsuario;
 import Logica.Enumerados.Filtrado;
 import Logica.Enumerados.Privacidad;
 import Logica.Fabrica;
 import Logica.Interfaces.IUsuario;
 import java.io.IOException;
-import java.io.PrintWriter;
+import java.io.InputStream;
+import java.nio.file.Paths;
 import java.text.SimpleDateFormat;
 import java.text.ParseException;
 import java.util.Date;
-import java.util.Formatter;
 import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletException;
-import javax.servlet.annotation.WebServlet;
+import javax.servlet.annotation.MultipartConfig;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.Part;
 
-/**
- *
- * @author administrador
- */
+@MultipartConfig
 public class AltaUsuario extends HttpServlet {
 
     // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
@@ -42,14 +41,20 @@ public class AltaUsuario extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
+        Funciones.Funciones.showLog(request, response);
         try {
+            IUsuario sys = Fabrica.getInstancia().getIUsuario();
+            
+            if (sys.sesionIniciada()){
+                response.sendRedirect("");
+                return;
+            }
+            
             RequestDispatcher rd; //objeto para despachar
             rd = request.getRequestDispatcher("/AltaUsuario.jsp");
             rd.forward(request, response);
         } catch (Exception e) {
-            System.out.println("---- Exception ----");
-            System.out.println(e.getMessage());
-            System.out.println("-------------------");
+            Funciones.Funciones.showLog(e);
             RequestDispatcher rd; //objeto para despachar
             request.setAttribute("mensajeError", e.getMessage());
             rd = request.getRequestDispatcher("/404.jsp");
@@ -69,6 +74,7 @@ public class AltaUsuario extends HttpServlet {
     @Override
     protected void doPost(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
+        Funciones.Funciones.showLog(request, response);
         try {
             String pNickname = request.getParameter("nickname");
             String pNombre = request.getParameter("nombre");
@@ -106,14 +112,22 @@ public class AltaUsuario extends HttpServlet {
             sys.altaUsuarioCanal(Usu, CanUsu);
             DtUsuario nuevoUsuario = sys.obtenerUsuarioActual();
             
+            Part partImagen = request.getPart("imagen");
+            String nombreArchivo = Paths.get(partImagen.getSubmittedFileName()).getFileName().toString();
+            InputStream archivoContenido = partImagen.getInputStream();
+            if (archivoContenido.available() > 0) {
+                byte[] byteArr = new byte[archivoContenido.available()];
+                archivoContenido.read(byteArr);
+                DtImagenUsuario dtiu = new DtImagenUsuario(nuevoUsuario.getNickname(), byteArr, nombreArchivo);
+                Fabrica.getInstancia().getIPersistenciaDeImagenes().create(dtiu);
+            }
+            
             request.getSession().setMaxInactiveInterval(14400);
             request.getSession().setAttribute("usuario", nuevoUsuario);
             response.sendRedirect("/uytube/usuario-consultar?id=" + Usu.getNickname());
-
+            
         } catch (Exception e) {
-            System.out.println("---- Exception ----");
-            System.out.println(e.getMessage());
-            System.out.println("-------------------");
+            Funciones.Funciones.showLog(e);
             RequestDispatcher rd; //objeto para despachar
             request.setAttribute("mensajeError", e.getMessage());
             rd = request.getRequestDispatcher("/404.jsp");
diff --git a/UyTube_web/src/java/com/uytube/AltaVideo.java b/UyTube_web/src/java/com/uytube/AltaVideo.java
index e612c1bc16338f3536893627a553256534a6d92f..e897bc898cfabc82e46e960dfc618c55fb118d3c 100644
--- a/UyTube_web/src/java/com/uytube/AltaVideo.java
+++ b/UyTube_web/src/java/com/uytube/AltaVideo.java
@@ -10,7 +10,6 @@ import Logica.Enumerados.Privacidad;
 import Logica.Fabrica;
 import Logica.Interfaces.IUsuario;
 import java.io.IOException;
-import java.io.PrintWriter;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
@@ -39,8 +38,20 @@ public class AltaVideo extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
+        Funciones.Funciones.showLog(request, response);
         try {
             IUsuario sys = Fabrica.getInstancia().getIUsuario();
+            
+            if (!sys.sesionIniciada()){
+                String msj = "No puedes acceder a esta página";
+                Funciones.Funciones.showLog("Acceso denegado", msj);
+                RequestDispatcher rd; //objeto para despachar
+                request.setAttribute("mensajeError", msj);
+                rd = request.getRequestDispatcher("/401.jsp");
+                rd.forward(request, response);
+                return;
+            }
+            
             boolean sesionIniciada = sys.sesionIniciada();
             ArrayList<String> cate = sys.listarCategorias();
 
@@ -51,9 +62,7 @@ public class AltaVideo extends HttpServlet {
             rd = request.getRequestDispatcher("/AltaVideo.jsp");
             rd.forward(request, response);
         } catch (Exception e) {
-            System.out.println("---- Exception ----");
-            System.out.println(e.getMessage());
-            System.out.println("-------------------");
+            Funciones.Funciones.showLog(e);
             RequestDispatcher rd; //objeto para despachar
             request.setAttribute("mensajeError", e.getMessage());
             rd = request.getRequestDispatcher("/404.jsp");
@@ -73,9 +82,20 @@ public class AltaVideo extends HttpServlet {
     @Override
     protected void doPost(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
-
+        Funciones.Funciones.showLog(request, response);
         try {
             IUsuario sys = Fabrica.getInstancia().getIUsuario();
+            
+            if (!sys.sesionIniciada()){
+                String msj = "No puedes acceder a esta página";
+                Funciones.Funciones.showLog("Acceso denegado", msj);
+                RequestDispatcher rd; //objeto para despachar
+                request.setAttribute("mensajeError", msj);
+                rd = request.getRequestDispatcher("/401.jsp");
+                rd.forward(request, response);
+                return;
+            }
+            
             String pNombre = request.getParameter("nombre");
             String pDuracion = request.getParameter("duracion");
             String pUrl = request.getParameter("url");
@@ -116,9 +136,7 @@ public class AltaVideo extends HttpServlet {
             response.sendRedirect("/uytube/video-consultar?id=" + idNuevoVideo);
             
         } catch (Exception e) {
-            System.out.println("---- Exception ----");
-            System.out.println(e.getMessage());
-            System.out.println("-------------------");
+            Funciones.Funciones.showLog(e);
             RequestDispatcher rd; //objeto para despachar
             request.setAttribute("mensajeError", e.getMessage());
             rd = request.getRequestDispatcher("/404.jsp");
diff --git a/UyTube_web/src/java/com/uytube/BorrarUsuario.java b/UyTube_web/src/java/com/uytube/BorrarUsuario.java
index 4c1471468dc5596c3f59487a3a98a5882d10e908..9a3851eaa30a992ab3084e1d632e93e944be3197 100644
--- a/UyTube_web/src/java/com/uytube/BorrarUsuario.java
+++ b/UyTube_web/src/java/com/uytube/BorrarUsuario.java
@@ -5,11 +5,9 @@
  */
 package com.uytube;
 
-import Logica.Clases.Usuario;
 import Logica.Fabrica;
 import Logica.Interfaces.IUsuario;
 import java.io.IOException;
-import java.io.PrintWriter;
 import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletException;
 import javax.servlet.annotation.WebServlet;
@@ -31,8 +29,20 @@ public class BorrarUsuario extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
+        Funciones.Funciones.showLog(request, response);
         try {
             IUsuario sys = Fabrica.getInstancia().getIUsuario();
+            
+            if (!sys.sesionIniciada()){
+                String msj = "No puedes realizar esta acción";
+                Funciones.Funciones.showLog("Acceso denegado", msj);
+                RequestDispatcher rd; //objeto para despachar
+                request.setAttribute("mensajeError", msj);
+                rd = request.getRequestDispatcher("/401.jsp");
+                rd.forward(request, response);
+                return;
+            }
+            
             sys.bajaUsuario();
             request.getSession().invalidate();
             
@@ -40,9 +50,7 @@ public class BorrarUsuario extends HttpServlet {
             rd = request.getRequestDispatcher("/");
             rd.forward(request, response);
         } catch (Exception e) {
-            System.out.println("---- Exception ----");
-            System.out.println(e.getMessage());
-            System.out.println("-------------------");
+            Funciones.Funciones.showLog(e);
             RequestDispatcher rd; //objeto para despachar
             request.setAttribute("mensajeError", e.getMessage());
             rd = request.getRequestDispatcher("/404.jsp");
diff --git a/UyTube_web/src/java/com/uytube/Buscar.java b/UyTube_web/src/java/com/uytube/Buscar.java
index e53e1ea69486855cd289a428a737c7a11676fbd0..aaa34a783966d513cd623be2c29c2f91cdeb014b 100644
--- a/UyTube_web/src/java/com/uytube/Buscar.java
+++ b/UyTube_web/src/java/com/uytube/Buscar.java
@@ -35,6 +35,7 @@ public class Buscar extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
+        Funciones.Funciones.showLog(request, response);
         try {
             IUsuario sys = Fabrica.getInstancia().getIUsuario();
             //-----------------------------------------------------
@@ -45,14 +46,6 @@ public class Buscar extends HttpServlet {
             //------------------------------------------------------
             ArrayList<Object> Ret = null;
             
-            System.out.println("-------------------------");
-            System.out.println("Busqueda a realizar con los siguientes parametros");
-            System.out.println("categoria: '" + Categoria + "'");
-            System.out.println("texto: '" + Texto + "'");
-            System.out.println("filtro: '" + Filtro + "'");
-            System.out.println("orden: '" + Orden + "'");
-                System.out.println("-------------------------");
-            
             if (Categoria == null || Categoria.equalsIgnoreCase("")) {
                 Filtrado Fil = Filtrado.TODO;
                 Ordenacion ord = Ordenacion.FECHA_DESCENDENTE;
@@ -60,13 +53,13 @@ public class Buscar extends HttpServlet {
                 if (Filtro != null && Filtro.equalsIgnoreCase("CANALES")) {
                     Fil = Filtrado.CANALES;
                 }
-                if (Filtro != null && (Filtro.equalsIgnoreCase("LISTAS DE REPRODUCCION") || Filtro.equalsIgnoreCase("LISTAS DE REPRODUCCION") || Filtro.equalsIgnoreCase("LISTAS DE REPRODUCCIóN") || Filtro.equalsIgnoreCase("LISTAS_DE_REPRODUCCIÓN"))) {
+                if (Filtro != null && (Filtro.equalsIgnoreCase("LISTAS DE REPRODUCCION") || Filtro.equalsIgnoreCase("LISTAS_DE_REPRODUCCION") || Filtro.equalsIgnoreCase("LISTAS DE REPRODUCCIóN") || Filtro.equalsIgnoreCase("LISTAS_DE_REPRODUCCIÓN"))) {
                     Fil = Filtrado.LISTAS_DE_REPRODUCCION;
                 }
                 if (Filtro != null && Filtro.equalsIgnoreCase("VIDEOS")) {
                     Fil = Filtrado.VIDEOS;
                 }
-                if (Orden != null && Orden.equalsIgnoreCase("ALFABETICO")) {
+                if (Orden != null && (Orden.equalsIgnoreCase("ALFABÉTICO") || Orden.equalsIgnoreCase("ALFABETICO"))) {
                     ord = Ordenacion.ALFABETICA_ASCENDENTE;
                 }
 
@@ -79,18 +72,13 @@ public class Buscar extends HttpServlet {
                     Texto = Texto.replaceAll(comilla, vacio);
                 }
                 
-                System.out.println("texto a buscar: '" + Texto + "'");
-                System.out.println("Filtro a utilizar: " + Fil);
-                System.out.println("Orden a utilizar: " + ord);
-                
                 Ret = sys.buscar(Texto, Fil, ord);
             } else {
-                System.out.println("Categoria a buscar: " + Categoria);
                 Categoria = Categoria.toUpperCase();
                 Ret = sys.buscar(Categoria);
             }
-            System.out.println("Cantidad de resultados a devolver: " + Ret.size());
-            
+            Funciones.Funciones.showLog("Cantidad de resultados a devolver: ", String.valueOf(Ret.size()));
+
             request.setAttribute("Lista", Ret);
 
             RequestDispatcher rd; //objeto para despachar
@@ -98,9 +86,7 @@ public class Buscar extends HttpServlet {
             rd.forward(request, response);
             
         } catch (Exception e) {
-            System.out.println("---- Exception ----");
-            System.out.println(e.getMessage());
-            System.out.println("-------------------");
+            Funciones.Funciones.showLog(e);
             RequestDispatcher rd; //objeto para despachar
             request.setAttribute("mensajeError", e.getMessage());
             rd = request.getRequestDispatcher("/404.jsp");
diff --git a/UyTube_web/src/java/com/uytube/CerrarSesion.java b/UyTube_web/src/java/com/uytube/CerrarSesion.java
index 4f12528fffda75908a357f55068ebc888b7579a4..4fb1023c7462a0d6ba35d5d61fdebdea9acc21de 100644
--- a/UyTube_web/src/java/com/uytube/CerrarSesion.java
+++ b/UyTube_web/src/java/com/uytube/CerrarSesion.java
@@ -32,6 +32,7 @@ public class CerrarSesion extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
+        Funciones.Funciones.showLog(request, response);
         try {
             IUsuario sys = Fabrica.getInstancia().getIUsuario();
 
@@ -46,9 +47,7 @@ public class CerrarSesion extends HttpServlet {
             }
             response.sendRedirect("/uytube/");
         } catch (Exception e) {
-            System.out.println("---- Exception ----");
-            System.out.println(e.getMessage());
-            System.out.println("-------------------");
+            Funciones.Funciones.showLog(e);
             RequestDispatcher rd; //objeto para despachar
             request.setAttribute("mensajeError", e.getMessage());
             rd = request.getRequestDispatcher("/404.jsp");
diff --git a/UyTube_web/src/java/com/uytube/ConsultaListaReproducion.java b/UyTube_web/src/java/com/uytube/ConsultaListaReproducion.java
index 50e2dbe68f28d6346bd7a8dc3175070fa95d0314..2f5e822474568e52e649e11bf26d3b6877683e9a 100644
--- a/UyTube_web/src/java/com/uytube/ConsultaListaReproducion.java
+++ b/UyTube_web/src/java/com/uytube/ConsultaListaReproducion.java
@@ -10,7 +10,6 @@ import Logica.DataType.DtVideo;
 import Logica.Fabrica;
 import Logica.Interfaces.IUsuario;
 import java.io.IOException;
-import java.io.PrintWriter;
 import java.util.ArrayList;
 import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletException;
@@ -36,6 +35,7 @@ public class ConsultaListaReproducion extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
+        Funciones.Funciones.showLog(request, response);
         try {
             IUsuario sys = Fabrica.getInstancia().getIUsuario();
             boolean sesionIniciada = sys.sesionIniciada();
@@ -64,9 +64,7 @@ public class ConsultaListaReproducion extends HttpServlet {
             rd.forward(request, response);
             
         } catch (Exception e) {
-            System.out.println("---- Exception ----");
-            System.out.println(e.getMessage());
-            System.out.println("-------------------");
+            Funciones.Funciones.showLog(e);
             RequestDispatcher rd; //objeto para despachar
             request.setAttribute("mensajeError", e.getMessage());
             rd = request.getRequestDispatcher("/404.jsp");
diff --git a/UyTube_web/src/java/com/uytube/ConsultaUsuario.java b/UyTube_web/src/java/com/uytube/ConsultaUsuario.java
index 79ff8c7cc62fd44e86a8137b74c199b584a5d504..1010dd1d071338f0db233eec746bb9f4ce48eae2 100644
--- a/UyTube_web/src/java/com/uytube/ConsultaUsuario.java
+++ b/UyTube_web/src/java/com/uytube/ConsultaUsuario.java
@@ -10,6 +10,7 @@ import Logica.DataType.DtListaDeReproduccion;
 import Logica.DataType.DtUsuario;
 import Logica.DataType.DtVideo;
 import Logica.Fabrica;
+import Logica.Interfaces.IPersistenciaDeImagenes;
 import Logica.Interfaces.IUsuario;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -36,6 +37,7 @@ public class ConsultaUsuario extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
+        Funciones.Funciones.showLog(request, response);
         try {
             IUsuario sys = Fabrica.getInstancia().getIUsuario();
             String nick = request.getParameter("id");
@@ -72,9 +74,7 @@ public class ConsultaUsuario extends HttpServlet {
             rd.forward(request, response);
 
         } catch (Exception e) {
-            System.out.println("---- Exception ----");
-            System.out.println(e.getMessage());
-            System.out.println("-------------------");
+            Funciones.Funciones.showLog(e);
             RequestDispatcher rd; //objeto para despachar
             request.setAttribute("mensajeError", e.getMessage());
             rd = request.getRequestDispatcher("/404.jsp");
diff --git a/UyTube_web/src/java/com/uytube/ConsultaVideo.java b/UyTube_web/src/java/com/uytube/ConsultaVideo.java
index f697e5fc9b5105bf096384ad52b3deb06905c32e..1dba3d2cbacf10ea27cb8de04fadf6d905d02b64 100644
--- a/UyTube_web/src/java/com/uytube/ConsultaVideo.java
+++ b/UyTube_web/src/java/com/uytube/ConsultaVideo.java
@@ -3,12 +3,12 @@ package com.uytube;
 import Funciones.Funciones;
 import Logica.DataType.DtCanal;
 import Logica.DataType.DtComentario;
+import Logica.DataType.DtListaDeReproduccion;
 import Logica.DataType.DtUsuario;
 import Logica.DataType.DtValoracion;
 import Logica.DataType.DtVideo;
 import Logica.Enumerados.TipoValoracion;
 import Logica.Fabrica;
-import Logica.Interfaces.IAdmin;
 import Logica.Interfaces.IUsuario;
 import java.io.IOException;
 import java.text.SimpleDateFormat;
@@ -32,11 +32,12 @@ public class ConsultaVideo extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
+        Funciones.showLog(request, response);
         try {
             IUsuario sys = Fabrica.getInstancia().getIUsuario();
             String strIDVideo = request.getParameter("id");
             int idVideo = Integer.valueOf(strIDVideo);
-
+            
             DtUsuario usuario = sys.obtenerPropietarioDeVideo(idVideo);
             sys.seleccionarUsuario(usuario.getNickname());
             DtCanal canal = sys.obtenerCanalDeUsuario();
@@ -46,15 +47,19 @@ public class ConsultaVideo extends HttpServlet {
             ArrayList<DtValoracion> valoraciones = null;
             boolean sesionIniciada = sys.sesionIniciada();
             boolean propietarioDelVideo = false;
+            ArrayList<DtListaDeReproduccion> listas = null;
             if (sesionIniciada) {
                 propietarioDelVideo = usuario.getNickname().equals(sys.obtenerUsuarioActual().getNickname());
                 valoracionDada = sys.obtenerValoracionDada();
                 if (propietarioDelVideo){
-                     valoraciones = sys.obtenerValoracionesDeVideo();
+                    valoraciones = sys.obtenerValoracionesDeVideo();
                 }
+                sys.seleccionarUsuario(sys.obtenerUsuarioActual().getNickname());
+                listas = sys.listarListasDeReproduccionDeUsuario(true);
+                sys.seleccionarUsuario(sys.obtenerPropietarioDeVideo(idVideo).getNickname());
             }
             
-            String htmlComentarios = htmlDeSeccionDeComentarios(comentarios, obtenerImagenesDeUsuarios(comentarios), sesionIniciada);
+            String htmlComentarios = htmlDeSeccionDeComentarios(comentarios, sesionIniciada);
             // no se si la siguiente linea es necesaria, pero por las dudas la pongo, para no dejar incoherencias en la logica
             sys.seleccionarUsuario(usuario.getNickname());
             request.setAttribute("usuario", usuario);
@@ -65,13 +70,12 @@ public class ConsultaVideo extends HttpServlet {
             request.setAttribute("propietarioDelVideo", propietarioDelVideo);
             request.setAttribute("valoracionDada", valoracionDada);
             request.setAttribute("valoraciones", valoraciones);
+            request.setAttribute("listas", listas);
             RequestDispatcher rd; //objeto para despachar
             rd = request.getRequestDispatcher("/ConsultaVideo.jsp");
             rd.forward(request, response);
         } catch (Exception e) {
-            System.out.println("---- Exception ----");
-            System.out.println(e.getMessage());
-            System.out.println("-------------------");
+            Funciones.showLog(e);
             RequestDispatcher rd; //objeto para despachar
             request.setAttribute("mensajeError", e.getMessage());
             rd = request.getRequestDispatcher("/404.jsp");
@@ -90,6 +94,7 @@ public class ConsultaVideo extends HttpServlet {
     @Override
     protected void doPost(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
+        Funciones.showLog(request, response);
         try {
             IUsuario sys = Fabrica.getInstancia().getIUsuario();
             String accion = request.getParameter("accion");
@@ -202,7 +207,7 @@ public class ConsultaVideo extends HttpServlet {
                         sys.altaComentario(dtc, idComentario);
                     }       // se obtienen los comentarios y se genera el HTML para actualizar la p'pagina
                     ArrayList<DtComentario> comentarios = sys.listarComentariosDeVideo();
-                    String htmlComentarios = htmlDeSeccionDeComentarios(comentarios, obtenerImagenesDeUsuarios(comentarios), true);
+                    String htmlComentarios = htmlDeSeccionDeComentarios(comentarios, true);
                     // la funcion 'obtenerImagenesDeUsuarios' selecciona usuarios asi que por las dudas lo vuelvo a seleccionar para que la logica quede coherente
                     sys.seleccionarUsuario(usuarioDuenioDelVideo.getNickname());
                     respuesta = htmlComentarios;
@@ -210,18 +215,36 @@ public class ConsultaVideo extends HttpServlet {
                     break;
                 }
                 // ---- Acciones relacionadas a AGREGAR VIDEO A LISTA DE REPRODUCCION----
-                case "agregarALista":
-                    /*
+                case "agregarALista":{
+                    
                     int idVideo = Integer.valueOf(request.getParameter("idVideo"));
                     int idLista = Integer.valueOf(request.getParameter("idLista"));
                     
                     sys.seleccionarUsuario(sys.obtenerPropietarioDeVideo(idVideo).getNickname());
+                    sys.seleccionarVideo(idVideo);
                     sys.agregarVideoAListaDeReproduccion(idLista);
-                     */
-                    respuesta = "Esta funcionalidad no ha sido implementada aun...";
+                     
+                    
+                    respuesta = "ok";
+                    response.getWriter().write(respuesta);
+                    break;
+                }
+                case "quitarDeLista":{
+                    
+                    int idVideo = Integer.valueOf(request.getParameter("idVideo"));
+                    int idLista = Integer.valueOf(request.getParameter("idLista"));
+                    
+                    sys.seleccionarUsuario(sys.obtenerUsuarioActual().getNickname());
+                    sys.seleccionarListaDeReproduccion(idLista);
+                    sys.quitarVideoDeListaDeReproduccion(idVideo);
+                    sys.seleccionarUsuario(sys.obtenerPropietarioDeVideo(idVideo).getNickname());
+                    
+                    respuesta = "ok";
                     response.getWriter().write(respuesta);
                     break;
-                case "listarValoraciones":
+                }
+                    
+                case "listarValoraciones":{
                     int idVideo = Integer.valueOf(request.getParameter("idVideo"));
                     respuesta = "";
                     sys.seleccionarVideo(idVideo);
@@ -231,13 +254,12 @@ public class ConsultaVideo extends HttpServlet {
                     }
                     response.getWriter().write(respuesta);
                     break;
+                }
                 default:
                     break;
             }
         } catch (Exception e) {
-            System.out.println("---- Exception ----");
-            System.out.println(e.getMessage());
-            System.out.println("-------------------");
+            Funciones.showLog(e);
             RequestDispatcher rd; //objeto para despachar
             request.setAttribute("mensajeError", e.getMessage());
             rd = request.getRequestDispatcher("/404.jsp");
@@ -256,29 +278,14 @@ public class ConsultaVideo extends HttpServlet {
     }// </editor-fold>
     
     
-    private ArrayList<String> obtenerImagenesDeUsuarios(ArrayList<DtComentario> comentarios){
-        ArrayList<String> ret = new ArrayList();
-        IUsuario sys = Fabrica.getInstancia().getIUsuario();
-        String img;
-        for (DtComentario c : comentarios){
-            img = sys.seleccionarUsuario(c.getNickname()).getImagen();
-            if (img == null || img.equals("")){
-                img = "imagenes/ukp.png";
-            }
-            ret.add(img);
-        }
-        return ret;
-    }
-    
-    private String htmlDeSeccionDeComentarios(ArrayList<DtComentario> comentarios, ArrayList<String> imagenes, boolean  mostrarBotonResponder){
+    private String htmlDeSeccionDeComentarios(ArrayList<DtComentario> comentarios, boolean  mostrarBotonResponder){
         if (comentarios == null || comentarios.isEmpty()){
             return "";
         }
         
         String ret = "";
         DtComentario c = comentarios.remove(0);
-        String imgPerfil = "imagenes/ukp.png";
-        if ( ! imagenes.isEmpty())  imgPerfil = imagenes.remove(0);
+        String imgPerfil = "usuario-imagen?id=" + c.getNickname();
         String strFecha = new SimpleDateFormat("dd/MM/yyyy").format(c.getFecha());
         
         ret += "    <div class=\"media\">";
@@ -297,14 +304,14 @@ public class ConsultaVideo extends HttpServlet {
         ret += "            <br>";
         
         if ( (!comentarios.isEmpty()) && (comentarios.get(0).getNivelSubComentario() > c.getNivelSubComentario())){
-                ret += htmlDeSeccionDeComentarios(comentarios, imagenes, mostrarBotonResponder);
+                ret += htmlDeSeccionDeComentarios(comentarios, mostrarBotonResponder);
         }
         
         ret += "    </div>";
         ret += "</div>";
         
         if ( (!comentarios.isEmpty()) && (comentarios.get(0).getNivelSubComentario() == c.getNivelSubComentario())){
-                ret += htmlDeSeccionDeComentarios(comentarios, imagenes, mostrarBotonResponder);
+                ret += htmlDeSeccionDeComentarios(comentarios, mostrarBotonResponder);
         }
         return ret;
     }
diff --git a/UyTube_web/src/java/com/uytube/ImagenUsuario.java b/UyTube_web/src/java/com/uytube/ImagenUsuario.java
new file mode 100644
index 0000000000000000000000000000000000000000..d3cc8e940fb8425e8f4ec651cdcf9351c0a8db00
--- /dev/null
+++ b/UyTube_web/src/java/com/uytube/ImagenUsuario.java
@@ -0,0 +1,75 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.uytube;
+
+import Logica.DataType.DtImagenUsuario;
+import Logica.Fabrica;
+import Logica.Interfaces.IPersistenciaDeImagenes;
+import java.io.IOException;
+import java.io.OutputStream;
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ *
+ * @author Juan
+ */
+@WebServlet(name = "ImagenUsuario", urlPatterns = {"/usuario-imagen"})
+public class ImagenUsuario extends HttpServlet {
+
+    @Override
+    protected void doGet(HttpServletRequest request, HttpServletResponse response)
+            throws ServletException, IOException {
+        Funciones.Funciones.showLog(request, response);
+        try {
+            IPersistenciaDeImagenes pi = Fabrica.getInstancia().getIPersistenciaDeImagenes();
+            String id = request.getParameter("id");
+            if (id == null)  id = "";
+            
+            byte[] byteArr;
+            
+            DtImagenUsuario iu = pi.find(id);
+            byteArr = iu.getImagen();
+            
+            
+            //byte[] byteArr = ImagePersistController.pathToByteArray("C:\\cnf.jpg");
+            
+            response.setContentType("image/" + iu.getExtension());
+            OutputStream sos = response.getOutputStream();
+            sos.write(byteArr);
+            sos.flush();
+            sos.close();
+            
+        } catch (Exception e) {
+            Funciones.Funciones.showLog(e);
+            RequestDispatcher rd; //objeto para despachar
+            request.setAttribute("mensajeError", e.getMessage());
+            rd = request.getRequestDispatcher("/404.jsp");
+            rd.forward(request, response);
+        }
+    }
+    
+    @Override
+    protected void doPost(HttpServletRequest request, HttpServletResponse response)
+            throws ServletException, IOException {
+        
+    }
+
+    /**
+     * Returns a short description of the servlet.
+     *
+     * @return a String containing servlet description
+     */
+    @Override
+    public String getServletInfo() {
+        return "Short description";
+    }// </editor-fold>
+
+}
diff --git a/UyTube_web/src/java/com/uytube/IniciarSesion.java b/UyTube_web/src/java/com/uytube/IniciarSesion.java
index dd32f394437b58733701148d635c4ba6185af032..80285d53b6fd883015de63cac3d87876dcd2de54 100644
--- a/UyTube_web/src/java/com/uytube/IniciarSesion.java
+++ b/UyTube_web/src/java/com/uytube/IniciarSesion.java
@@ -9,7 +9,6 @@ import Logica.DataType.DtUsuario;
 import Logica.Fabrica;
 import Logica.Interfaces.IUsuario;
 import java.io.IOException;
-import java.io.PrintWriter;
 import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletException;
 import javax.servlet.annotation.WebServlet;
@@ -36,16 +35,24 @@ public class IniciarSesion extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
+        Funciones.Funciones.showLog(request, response);
         try {
             IUsuario sys = Fabrica.getInstancia().getIUsuario();
+            
+            
+            if (sys.sesionIniciada()){
+                response.sendRedirect("");
+                return;
+            }
 
             DtUsuario usuario = (DtUsuario) request.getSession().getAttribute("usuario");
             boolean sesReq = usuario != null;
             boolean sesSys = sys.sesionIniciada();
 
-            System.out.println("Intento de carga de pagina /inicio-sesion");
-            System.out.println("Sesion en req: " + sesReq);
-            System.out.println("Sesion en sys: " + sesSys);
+            String tit = "Intento de carga de pagina /inicio-sesion";
+            String msj = "Sesion en req: " + sesReq;
+            msj += "\nSesion en sys: " + sesSys;
+            Funciones.Funciones.showLog(tit, msj);
 
             /**
              * Descripción del siguiente IF sesReq sesSys accion a realizar 0 0
@@ -71,9 +78,7 @@ public class IniciarSesion extends HttpServlet {
             rd = request.getRequestDispatcher("/IniciarSesion.jsp");
             rd.forward(request, response);
         } catch (Exception e) {
-            System.out.println("---- Exception ----");
-            System.out.println(e.getMessage());
-            System.out.println("-------------------");
+            Funciones.Funciones.showLog(e);
             RequestDispatcher rd; //objeto para despachar
             request.setAttribute("mensajeError", e.getMessage());
             rd = request.getRequestDispatcher("/404.jsp");
@@ -92,6 +97,7 @@ public class IniciarSesion extends HttpServlet {
     @Override
     protected void doPost(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
+        Funciones.Funciones.showLog(request, response);
         try {
             IUsuario sys = Fabrica.getInstancia().getIUsuario();
 
@@ -117,9 +123,7 @@ public class IniciarSesion extends HttpServlet {
             }
             rd.forward(request, response);
         } catch (Exception e) {
-            System.out.println("---- Exception ----");
-            System.out.println(e.getMessage());
-            System.out.println("-------------------");
+            Funciones.Funciones.showLog(e);
             RequestDispatcher rd; //objeto para despachar
             request.setAttribute("mensajeError", e.getMessage());
             rd = request.getRequestDispatcher("/404.jsp");
diff --git a/UyTube_web/src/java/com/uytube/ModificarListaReproduccion.java b/UyTube_web/src/java/com/uytube/ModificarListaReproduccion.java
index ee44fa1b9dd7989774026e9ef05225c05e1c2321..fc4442b30526919487f5d1a18bd5b2c60ae47053 100644
--- a/UyTube_web/src/java/com/uytube/ModificarListaReproduccion.java
+++ b/UyTube_web/src/java/com/uytube/ModificarListaReproduccion.java
@@ -12,7 +12,6 @@ import Logica.Enumerados.TipoListaDeReproduccion;
 import Logica.Fabrica;
 import Logica.Interfaces.IUsuario;
 import java.io.IOException;
-import java.io.PrintWriter;
 import java.util.ArrayList;
 import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletException;
@@ -40,8 +39,20 @@ public class ModificarListaReproduccion extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
+        Funciones.Funciones.showLog(request, response);
         try {
             IUsuario sys = Fabrica.getInstancia().getIUsuario();
+            
+            if (!sys.sesionIniciada()){
+                String msj = "No puedes acceder a esta página";
+                Funciones.Funciones.showLog("Acceso denegado", msj);
+                RequestDispatcher rd; //objeto para despachar
+                request.setAttribute("mensajeError", msj);
+                rd = request.getRequestDispatcher("/401.jsp");
+                rd.forward(request, response);
+                return;
+            }
+            
             boolean sesionIniciada = sys.sesionIniciada();
             ArrayList<String> cate = sys.listarCategorias();
             String usuario = request.getParameter("idUsu");
@@ -61,9 +72,7 @@ public class ModificarListaReproduccion extends HttpServlet {
             rd.forward(request, response);
             
         } catch (Exception e) {
-            System.out.println("---- Exception ----");
-            System.out.println(e.getMessage());
-            System.out.println("-------------------");
+            Funciones.Funciones.showLog(e);
             RequestDispatcher rd; //objeto para despachar
             request.setAttribute("mensajeError", e.getMessage());
             rd = request.getRequestDispatcher("/404.jsp");
@@ -82,15 +91,24 @@ public class ModificarListaReproduccion extends HttpServlet {
     @Override
     protected void doPost(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
+        Funciones.Funciones.showLog(request, response);
          try {
+            IUsuario sys = Fabrica.getInstancia().getIUsuario();
+            
+            if (!sys.sesionIniciada()){
+                String msj = "No puedes acceder a esta página";
+                Funciones.Funciones.showLog("Acceso denegado", msj);
+                RequestDispatcher rd; //objeto para despachar
+                request.setAttribute("mensajeError", msj);
+                rd = request.getRequestDispatcher("/401.jsp");
+                rd.forward(request, response);
+                return;
+            }
             
             String pPrivacidad = request.getParameter("privacidad");
             String pCategoria = request.getParameter("categoria");
             String pNombre = request.getParameter("nombre");
             
-
-            IUsuario sys = Fabrica.getInstancia().getIUsuario();
-            
             DtUsuario usu = sys.obtenerUsuarioActual();
             
             Privacidad priv = Privacidad.PRIVADO;
@@ -113,9 +131,7 @@ public class ModificarListaReproduccion extends HttpServlet {
             response.sendRedirect("lista-consultar?id=" + idNuevaLista);
             
         } catch (Exception e) {
-            System.out.println("---- Exception ----");
-            System.out.println(e.getMessage());
-            System.out.println("-------------------");
+            Funciones.Funciones.showLog(e);
             RequestDispatcher rd; //objeto para despachar
             request.setAttribute("mensajeError", e.getMessage());
             rd = request.getRequestDispatcher("/404.jsp");
diff --git a/UyTube_web/src/java/com/uytube/ModificarUsuario.java b/UyTube_web/src/java/com/uytube/ModificarUsuario.java
index 6e489d062bfb07b9d9fbe65b3944bd26ac7650ed..be1f064b3c8cdc4a51676f59b5ef1d58a763e561 100644
--- a/UyTube_web/src/java/com/uytube/ModificarUsuario.java
+++ b/UyTube_web/src/java/com/uytube/ModificarUsuario.java
@@ -6,26 +6,30 @@
 package com.uytube;
 
 import Logica.DataType.DtCanal;
+import Logica.DataType.DtImagenUsuario;
 import Logica.DataType.DtUsuario;
 import Logica.Enumerados.Privacidad;
 import Logica.Fabrica;
 import Logica.Interfaces.IUsuario;
 import java.io.IOException;
-import java.io.PrintWriter;
+import java.io.InputStream;
+import java.nio.file.Paths;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
 import java.util.Date;
 import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletException;
+import javax.servlet.annotation.MultipartConfig;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.Part;
 
 /**
  *
  * @author administrador
  */
+@MultipartConfig
 public class ModificarUsuario extends HttpServlet {
 
     // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
@@ -40,10 +44,20 @@ public class ModificarUsuario extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
-
+        Funciones.Funciones.showLog(request, response);
         try {
             IUsuario sys = Fabrica.getInstancia().getIUsuario();
-
+            
+            if (!sys.sesionIniciada()){
+                String msj = "No puedes acceder a esta página";
+                Funciones.Funciones.showLog("Acceso denegado", msj);
+                RequestDispatcher rd; //objeto para despachar
+                request.setAttribute("mensajeError", msj);
+                rd = request.getRequestDispatcher("/401.jsp");
+                rd.forward(request, response);
+                return;
+            }
+            
             String nick = request.getParameter("id");
 
             DtUsuario usuario = sys.seleccionarUsuario(nick);
@@ -64,9 +78,7 @@ public class ModificarUsuario extends HttpServlet {
             rd.forward(request, response);
 
         } catch (Exception e) {
-            System.out.println("---- Exception ----");
-            System.out.println(e.getMessage());
-            System.out.println("-------------------");
+            Funciones.Funciones.showLog(e);
             RequestDispatcher rd; //objeto para despachar
             request.setAttribute("mensajeError", e.getMessage());
             rd = request.getRequestDispatcher("/404.jsp");
@@ -86,7 +98,20 @@ public class ModificarUsuario extends HttpServlet {
     @Override
     protected void doPost(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
+        Funciones.Funciones.showLog(request, response);
         try {
+            IUsuario sys = Fabrica.getInstancia().getIUsuario();
+            
+            if (!sys.sesionIniciada()){
+                String msj = "No puedes acceder a esta página";
+                Funciones.Funciones.showLog("Acceso denegado", msj);
+                RequestDispatcher rd; //objeto para despachar
+                request.setAttribute("mensajeError", msj);
+                rd = request.getRequestDispatcher("/401.jsp");
+                rd.forward(request, response);
+                return;
+            }
+            
             String pNickname = request.getParameter("nickname");
             String pNombre = request.getParameter("nombre");
             String pApellido = request.getParameter("apellido");
@@ -98,8 +123,6 @@ public class ModificarUsuario extends HttpServlet {
             String pDescripcion = request.getParameter("descripcion");
             String pImaguen = request.getParameter("imagen");
 
-            IUsuario sys = Fabrica.getInstancia().getIUsuario();
-
             SimpleDateFormat formato = new SimpleDateFormat("yyyy-mm-dd");
             Date fechaDate = null;
             try {
@@ -115,20 +138,26 @@ public class ModificarUsuario extends HttpServlet {
             if (pPrivacidad != null && pPrivacidad.equals("PUBLICO")) {
                 Priv = Privacidad.PUBLICO;
             }
-
-            System.out.println(pNickname);
-
+            
             DtCanal CanUsu = new DtCanal(0, pCanal, pDescripcion, Priv);
             DtUsuario Usu = new DtUsuario(pNickname, pPassword, pNombre, pApellido, pEmail, fecha_Nac, pImaguen, 0);
 
             sys.modificarUsuarioYCanal(Usu, CanUsu);
 
+            Part partImagen = request.getPart("imagen");
+            String nombreArchivo = Paths.get(partImagen.getSubmittedFileName()).getFileName().toString();
+            InputStream archivoContenido = partImagen.getInputStream();
+            if (archivoContenido.available() > 0) {
+                byte[] byteArr = new byte[archivoContenido.available()];
+                archivoContenido.read(byteArr);
+                DtImagenUsuario dtiu = new DtImagenUsuario(Usu.getNickname(), byteArr, nombreArchivo);
+                Fabrica.getInstancia().getIPersistenciaDeImagenes().edit(dtiu);
+            }
+            
             response.sendRedirect("/uytube/usuario-consultar?id=" + Usu.getNickname());
 
         } catch (Exception e) {
-            System.out.println("---- Exception ----");
-            System.out.println(e.getMessage());
-            System.out.println("-------------------");
+            Funciones.Funciones.showLog(e);
             RequestDispatcher rd; //objeto para despachar
             request.setAttribute("mensajeError", e.getMessage());
             rd = request.getRequestDispatcher("/404.jsp");
diff --git a/UyTube_web/src/java/com/uytube/ModificarVideo.java b/UyTube_web/src/java/com/uytube/ModificarVideo.java
index 5f83450233a7d3a09cfd45e64df08b0dca261e30..0778221efda4f4e9c8309a10e4f871451b2bfc66 100644
--- a/UyTube_web/src/java/com/uytube/ModificarVideo.java
+++ b/UyTube_web/src/java/com/uytube/ModificarVideo.java
@@ -10,7 +10,6 @@ import Logica.Enumerados.Privacidad;
 import Logica.Fabrica;
 import Logica.Interfaces.IUsuario;
 import java.io.IOException;
-import java.io.PrintWriter;
 import java.sql.Time;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -40,10 +39,22 @@ public class ModificarVideo extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
+        Funciones.Funciones.showLog(request, response);
         try {
+            IUsuario sys = Fabrica.getInstancia().getIUsuario();
+            
+            if (!sys.sesionIniciada()){
+                String msj = "No puedes acceder a esta página";
+                Funciones.Funciones.showLog("Acceso denegado", msj);
+                RequestDispatcher rd; //objeto para despachar
+                request.setAttribute("mensajeError", msj);
+                rd = request.getRequestDispatcher("/401.jsp");
+                rd.forward(request, response);
+                return;
+            }
+            
             int id = Integer.parseInt(request.getParameter("id"));
 
-            IUsuario sys = Fabrica.getInstancia().getIUsuario();
             boolean sesionIniciada = sys.sesionIniciada();
             ArrayList<String> cate = sys.listarCategorias();
             DtVideo video = sys.seleccionarVideo(id);
@@ -55,9 +66,7 @@ public class ModificarVideo extends HttpServlet {
             rd = request.getRequestDispatcher("/ModificarVideo.jsp");
             rd.forward(request, response);
         } catch (Exception e) {
-            System.out.println("---- Exception ----");
-            System.out.println(e.getMessage());
-            System.out.println("-------------------");
+            Funciones.Funciones.showLog(e);
             RequestDispatcher rd; //objeto para despachar
             request.setAttribute("mensajeError", e.getMessage());
             rd = request.getRequestDispatcher("/404.jsp");
@@ -76,9 +85,20 @@ public class ModificarVideo extends HttpServlet {
     @Override
     protected void doPost(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
-
+        Funciones.Funciones.showLog(request, response);
         try {
             IUsuario sys = Fabrica.getInstancia().getIUsuario();
+            
+            if (!sys.sesionIniciada()){
+                String msj = "No puedes acceder a esta página";
+                Funciones.Funciones.showLog("Acceso denegado", msj);
+                RequestDispatcher rd; //objeto para despachar
+                request.setAttribute("mensajeError", msj);
+                rd = request.getRequestDispatcher("/401.jsp");
+                rd.forward(request, response);
+                return;
+            }
+            
             String pNombre = request.getParameter("nombre");
             String pDuracion = request.getParameter("duracion");
             String pUrl = request.getParameter("url");
@@ -123,9 +143,7 @@ public class ModificarVideo extends HttpServlet {
             
             response.sendRedirect("video-consultar?id=" + idNuevoVideo);
         } catch (Exception e) {
-            System.out.println("---- Exception ----");
-            System.out.println(e.getMessage());
-            System.out.println("-------------------");
+            Funciones.Funciones.showLog(e);
             RequestDispatcher rd; //objeto para despachar
             request.setAttribute("mensajeError", e.getMessage());
             rd = request.getRequestDispatcher("/404.jsp");
diff --git a/UyTube_web/src/java/com/uytube/PeticionAjax.java b/UyTube_web/src/java/com/uytube/PeticionAjax.java
index b28f9f367fd3b2eb0aa3fcc98cae79dca148fd0d..9c62dd80d1a85594392f1c5fb4e531d648f6d3d2 100644
--- a/UyTube_web/src/java/com/uytube/PeticionAjax.java
+++ b/UyTube_web/src/java/com/uytube/PeticionAjax.java
@@ -32,7 +32,6 @@ public class PeticionAjax extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
-         
         try {
             /*
          Aca debe recibir un parametor de nombre accion el cual define cual es la funcion
@@ -44,10 +43,6 @@ public class PeticionAjax extends HttpServlet {
             String accion = request.getParameter("accion"); // obtiene lo enviado por AJAX
             String dato = request.getParameter("dato"); // obtiene lo enviado por AJAX
             
-            System.out.println("-- Peticion AJAX --");
-            System.out.println("accion: " + accion);
-            System.out.println("dato: " + dato);
-            
             // prepara respuesta
             response.setContentType("text/plain");  //Set content type of the response so that jQuery knows what it can expect.
             response.setCharacterEncoding("UTF-8"); //You want world domination, huh?
@@ -89,12 +84,11 @@ public class PeticionAjax extends HttpServlet {
                     }
                     break;
             }
-            System.out.println("Respuesta: " + respuesta);
+            Funciones.Funciones.showLog(request, response);
+            Funciones.Funciones.showLog("Respuesta", respuesta);
             response.getWriter().write(respuesta);
         } catch (Exception e) {
-            System.out.println("---- Exception ----");
-            System.out.println(e.getMessage());
-            System.out.println("-------------------");
+            Funciones.Funciones.showLog(e);
             RequestDispatcher rd; //objeto para despachar
             request.setAttribute("mensajeError", e.getMessage());
             rd = request.getRequestDispatcher("/404.jsp");
diff --git a/UyTube_web/src/java/com/uytube/Presentacion.java b/UyTube_web/src/java/com/uytube/Presentacion.java
index a677db691c7c4318d8f7236096a247e5b99b0d4f..998226658eeb291aab898b0cbc8b35e6e8ed169a 100644
--- a/UyTube_web/src/java/com/uytube/Presentacion.java
+++ b/UyTube_web/src/java/com/uytube/Presentacion.java
@@ -5,13 +5,11 @@
  */
 package com.uytube;
 
-import Logica.DataType.DtVideo;
 import Logica.Enumerados.Filtrado;
 import Logica.Enumerados.Ordenacion;
 import Logica.Fabrica;
 import Logica.Interfaces.IUsuario;
 import java.io.IOException;
-import java.io.PrintWriter;
 import java.util.ArrayList;
 import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletException;
@@ -39,7 +37,7 @@ public class Presentacion extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
-
+        Funciones.Funciones.showLog(request, response);
         try {
             IUsuario sys = Fabrica.getInstancia().getIUsuario();
             boolean sesionIniciada = sys.sesionIniciada();
@@ -52,9 +50,7 @@ public class Presentacion extends HttpServlet {
             rd = request.getRequestDispatcher("/Presentacion.jsp");
             rd.forward(request, response);
         } catch (Exception e) {
-            System.out.println("---- Exception ----");
-            System.out.println(e.getMessage());
-            System.out.println("-------------------");
+            Funciones.Funciones.showLog(e);
             RequestDispatcher rd; //objeto para despachar
             request.setAttribute("mensajeError", e.getMessage());
             rd = request.getRequestDispatcher("/404.jsp");
diff --git a/UyTube_web/src/java/com/uytube/QuitarVideoDeListaReproduccion.java b/UyTube_web/src/java/com/uytube/QuitarVideoDeListaReproduccion.java
index a97d1a138312e889c5039df4b290fdceb0aece84..3b16f9e33322d45cb62a99a54d6421a655a09361 100644
--- a/UyTube_web/src/java/com/uytube/QuitarVideoDeListaReproduccion.java
+++ b/UyTube_web/src/java/com/uytube/QuitarVideoDeListaReproduccion.java
@@ -9,7 +9,6 @@ import Logica.DataType.DtUsuario;
 import Logica.Fabrica;
 import Logica.Interfaces.IUsuario;
 import java.io.IOException;
-import java.io.PrintWriter;
 import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
@@ -34,8 +33,20 @@ public class QuitarVideoDeListaReproduccion extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
+        Funciones.Funciones.showLog(request, response);
         try {
             IUsuario sys = Fabrica.getInstancia().getIUsuario();
+            
+            if (!sys.sesionIniciada()){
+                String msj = "No puedes acceder a esta página";
+                Funciones.Funciones.showLog("Acceso denegado", msj);
+                RequestDispatcher rd; //objeto para despachar
+                request.setAttribute("mensajeError", msj);
+                rd = request.getRequestDispatcher("/401.jsp");
+                rd.forward(request, response);
+                return;
+            }
+            
             String pIDVideo = request.getParameter("idvideo");
             String pIDLista = request.getParameter("idlista");
             int IDVideo = Integer.valueOf(pIDVideo);
@@ -48,9 +59,7 @@ public class QuitarVideoDeListaReproduccion extends HttpServlet {
 
             response.sendRedirect("lista-consultar?id="+IDLista);
         } catch (Exception e) {
-            System.out.println("---- Exception ----");
-            System.out.println(e.getMessage());
-            System.out.println("-------------------");
+            Funciones.Funciones.showLog(e);
             RequestDispatcher rd; //objeto para despachar
             request.setAttribute("mensajeError", e.getMessage());
             rd = request.getRequestDispatcher("/404.jsp");
diff --git a/UyTube_web/src/java/com/uytube/SeguirUsuario.java b/UyTube_web/src/java/com/uytube/SeguirUsuario.java
index ee77487db1fce60c5f0b8d14a626856f9622fd34..4597f96111fb387190178ef2e99490d8862738fe 100644
--- a/UyTube_web/src/java/com/uytube/SeguirUsuario.java
+++ b/UyTube_web/src/java/com/uytube/SeguirUsuario.java
@@ -8,7 +8,6 @@ package com.uytube;
 import Logica.Fabrica;
 import Logica.Interfaces.IUsuario;
 import java.io.IOException;
-import java.io.PrintWriter;
 import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
@@ -38,6 +37,7 @@ public class SeguirUsuario extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
+        Funciones.Funciones.showLog(request, response);
         try {
             IUsuario sys = Fabrica.getInstancia().getIUsuario();
             String nick = request.getParameter("id");
@@ -47,9 +47,7 @@ public class SeguirUsuario extends HttpServlet {
             response.sendRedirect("/uytube/usuario-consultar?id=" + nick);
             
         } catch (Exception e) {
-            System.out.println("---- Exception ----");
-            System.out.println(e.getMessage());
-            System.out.println("-------------------");
+            Funciones.Funciones.showLog(e);
             RequestDispatcher rd; //objeto para despachar
             request.setAttribute("mensajeError", e.getMessage());
             rd = request.getRequestDispatcher("/404.jsp");
diff --git a/UyTube_web/web/401.jsp b/UyTube_web/web/401.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..4e2324527cc4020402a70eb3b475a5df313285ff
--- /dev/null
+++ b/UyTube_web/web/401.jsp
@@ -0,0 +1,286 @@
+<%-- 
+    Document   : 404_2
+    Created on : 12/10/2019, 04:17:57 AM
+    Author     : Carlos BM
+--%>
+
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<!DOCTYPE html>
+<html lang="es">
+    <head>
+        <meta charset="UTF-8">
+        <meta http-equiv="X-UA-Compatible" content="IE=edge">
+        <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
+        <link rel="stylesheet" type="text/css" href="css/bootstrap.css">
+        <link rel="stylesheet" type="text/css" href="iconos/style.css">
+        <link rel="icon" type="image/png" href="imagenes/icono.png" />
+        <title>UyTube - 404</title>
+        
+    <style>
+        *
+        {
+            font-family: 'PT Sans Caption', sans-serif, 'arial', 'Times New Roman';
+        }
+
+        /* Error Page */
+        .error .clip .shadow
+        {
+            height: 180px;  /*Contrall*/
+        }
+        .error .clip:nth-of-type(2) .shadow
+        {
+            width: 130px;   /*Contrall play with javascript*/ 
+        }
+        .error .clip:nth-of-type(1) .shadow, .error .clip:nth-of-type(3) .shadow
+        {
+            width: 250px; /*Contrall*/
+        }
+        .error .digit
+        {
+            width: 150px;   /*Contrall*/
+            height: 150px;  /*Contrall*/
+            line-height: 150px; /*Contrall*/
+            font-size: 120px;
+            font-weight: bold;
+        }
+        .error h2   /*Contrall*/
+        {
+            font-size: 32px;
+        }
+        .error .msg /*Contrall*/
+        {
+            top: -190px;
+            left: 30%;
+            width: 80px;
+            height: 80px;
+            line-height: 80px;
+            font-size: 32px;
+        }
+        .error span.triangle    /*Contrall*/
+        {
+            top: 70%;
+            right: 0%;
+            border-left: 20px solid #535353; /*triandulito del uy*/
+            border-top: 15px solid transparent;
+            border-bottom: 15px solid transparent;
+        }
+
+
+        .error .container-error-404
+        {
+            margin-top: 10%;
+            position: relative;
+            height: 250px;
+            padding-top: 40px;
+        }
+        .error .container-error-404 .clip
+        {
+            display: inline-block;
+            transform: skew(-45deg);
+        }
+        .error .clip .shadow
+        {
+
+            overflow: hidden;
+        }
+        .error .clip:nth-of-type(2) .shadow
+        {
+            overflow: hidden;
+            position: relative;
+            box-shadow: inset 20px 0px 20px -15px rgba(150, 150, 150,0.8), 20px 0px 20px -15px rgba(150, 150, 150,0.8);
+        }
+
+        .error .clip:nth-of-type(3) .shadow:after, .error .clip:nth-of-type(1) .shadow:after
+        {
+            content: "";
+            position: absolute;
+            right: -8px;
+            bottom: 0px;
+            z-index: 9999;
+            height: 100%;
+            width: 10px;
+            background: linear-gradient(90deg, transparent, rgba(173,173,173, 0.8), transparent);
+            border-radius: 50%;
+        }
+        .error .clip:nth-of-type(3) .shadow:after
+        {
+            left: -8px;
+        }
+        .error .digit
+        {
+            position: relative;
+            top: 8%;
+            color: white;
+            background: #f5360d;  /* fondo de los circulos*/
+            border-radius: 50%;
+            display: inline-block;
+            transform: skew(45deg);
+        }
+        .error .clip:nth-of-type(2) .digit
+        {
+            left: -10%;
+        }
+        .error .clip:nth-of-type(1) .digit
+        {
+            right: -20%;
+        }.error .clip:nth-of-type(3) .digit
+        {
+            left: -20%;
+        }    
+        .error h2
+        {
+            color: #A2A2A2; /*uy tube se cayó*/
+            font-weight: bold;
+            padding-bottom: 20px;
+        }
+        .error .msg
+        {
+            position: relative;
+            z-index: 9999;
+            display: block;
+            background: #535353; /*logo*/
+            color: #A2A2A2; /*uy*/
+            border-radius: 50%;
+            font-style: italic;
+        }
+        .error .triangle
+        {
+            position: absolute;
+            z-index: 999;
+            transform: rotate(45deg);
+            content: "";
+            width: 0; 
+            height: 0; 
+        }
+
+        /* Error Page */
+        @media(max-width: 767px)
+        {
+            /* Error Page */
+            .error .clip .shadow
+            {
+                height: 100px;  /*Contrall*/
+            }
+            .error .clip:nth-of-type(2) .shadow
+            {
+                width: 80px;   /*Contrall play with javascript*/ 
+            }
+            .error .clip:nth-of-type(1) .shadow, .error .clip:nth-of-type(3) .shadow
+            {
+                width: 100px; /*Contrall*/
+            }
+            .error .digit
+            {
+                width: 80px;   /*Contrall*/
+                height: 80px;  /*Contrall*/
+                line-height: 80px; /*Contrall*/
+                font-size: 52px;
+            }
+            .error h2   /*Contrall*/
+            {
+                font-size: 24px;
+            }
+            .error .msg /*Contrall*/
+            {
+                top: -110px;
+                left: 15%;
+                width: 40px;
+                height: 40px;
+                line-height: 40px;
+                font-size: 18px;
+            }
+            .error span.triangle    /*Contrall*/
+            {
+                top: 70%;
+                right: -3%;
+                border-left: 10px solid #535353; /*no se*/
+                border-top: 8px solid transparent;
+                border-bottom: 8px solid transparent;
+            }
+            .error .container-error-404
+            {
+                height: 150px;
+            }
+            /* Error Page */
+        }
+
+        /*--------------------------------------------Framework --------------------------------*/
+
+        .overlay { position: relative; z-index: 20; } /*done*/
+        .ground-color { background: white; }  /*done*/
+        .item-bg-color { background: #EAEAEA } /*done*/
+
+        /* Padding Section*/
+        .padding-top { padding-top: 10px; } /*done*/
+        .padding-bottom { padding-bottom: 10px; }   /*done*/
+        .padding-vertical { padding-top: 10px; padding-bottom: 10px; }
+        .padding-horizontal { padding-left: 10px; padding-right: 10px; }
+        .padding-all { padding: 10px; }   /*done*/
+
+        .no-padding-left { padding-left: 0px; }    /*done*/
+        .no-padding-right { padding-right: 0px; }   /*done*/
+        .no-vertical-padding { padding-top: 0px; padding-bottom: 0px; }
+        .no-horizontal-padding { padding-left: 0px; padding-right: 0px; }
+        .no-padding { padding: 0px; }   /*done*/
+        /* Padding Section*/
+
+        /* Margin section */
+        .margin-top { margin-top: 10px; }   /*done*/
+        .margin-bottom { margin-bottom: 10px; } /*done*/
+        .margin-right { margin-right: 10px; } /*done*/
+        .margin-left { margin-left: 10px; } /*done*/
+        .margin-horizontal { margin-left: 10px; margin-right: 10px; } /*done*/
+        .margin-vertical { margin-top: 10px; margin-bottom: 10px; } /*done*/
+        .margin-all { margin: 10px; }   /*done*/
+        .no-margin { margin: 0px; }   /*done*/
+
+        .no-vertical-margin { margin-top: 0px; margin-bottom: 0px; }
+        .no-horizontal-margin { margin-left: 0px; margin-right: 0px; }
+
+        .inside-col-shrink { margin: 0px 20px; }    /*done - For the inside sections that has also Title section*/ 
+        /* Margin section */
+
+        hr
+        { margin: 0px; padding: 0px; border-top: 1px dashed #999; }
+        /*--------------------------------------------FrameWork------------------------*/
+    </style>
+</head>
+
+<body>
+
+    <!-- Error Page -->
+    <div class="error">
+        <div class="container-floud">
+            <div class="col-xs-12 ground-color text-center">
+                <div class="container-error-404">
+                    <div class="clip"><div class="shadow"><span class="digit thirdDigit">4</span></div></div>
+                    <div class="clip"><div class="shadow"><span class="digit secondDigit">0</span></div></div>
+                    <div class="clip"><div class="shadow"><span class="digit firstDigit">1</span></div></div>
+                    <div class="msg">Uy!<span class="triangle"></span></div>
+                </div>
+                <h2 class="h1">¡Uy!, parece que este mate no es tuyo</h2>
+                <%
+                    String mensajeError = (String) request.getAttribute("mensajeError");
+                    if (mensajeError != null){
+                        String msj = "";
+                        for (int idx = 0; idx < mensajeError.length(); idx++) {
+                            if (mensajeError.charAt(idx) == '\n'){
+                                break;
+                            }
+                            msj += mensajeError.charAt(idx);
+                        }
+                %>
+                <h2 class="h1" style="font-size: 20px;"><%= msj %></h2>
+                <%
+                    }
+                %>
+                
+                <h2 class="h1">
+                    <a href="/uytube/">Ir al inicio</a>
+                </h2>
+            </div>
+        </div>
+    </div>
+    <!-- Error Page -->
+</body>
+</html>
\ No newline at end of file
diff --git a/UyTube_web/web/AltaListaReproduccion.jsp b/UyTube_web/web/AltaListaReproduccion.jsp
index 1f9b636c44ce79a672e329691039273c30169d7d..7a1081fad4833a8e29d0e82d81af36c6ee055f05 100644
--- a/UyTube_web/web/AltaListaReproduccion.jsp
+++ b/UyTube_web/web/AltaListaReproduccion.jsp
@@ -22,7 +22,7 @@
         <link rel="stylesheet" type="text/css" href="css/menu.css">
         <link rel="stylesheet" type="text/css" href="css/widget.css">
         <link rel="stylesheet" type="text/css" href="css/footer.css">
-        <link rel="stylesheet" type="text/css" href="css/contenido-consulta-usuario.css">
+        <link rel="stylesheet" type="text/css" href="css/contenido-alta-lista.css">
         <link rel="stylesheet" type="text/css" href="iconos/style.css">
         <link rel="icon" type="image/png" href="imagenes/icono.png" />
         <title>UyTube - Nueva Lista</title>
@@ -73,40 +73,45 @@
                                 <div class="container">
 
                                     <!-- Agregar Listas-->
-                                    <div class="d-flex flex-row justify-content-center">
+                                    <div class="">
                                         <form class="form-signin" action="/uytube/lista-agregar" method="post">
                                             <br>
                                             <br>
                                             <h1 class="h3 mb-4 font-weight-normal" id="Texto_ingrese">Ingrese sus datos</h1>
-                                            <div class="mb-5">
-                                                <input type="text" class="form-control" name="nombreL" id="nombreLista" placeholder="Nombre de la lista" required>
-                                               <span id="msjNombre"></span>
+                                            <div class="mb-8 row">
+                                                <div class="col-md-12">
+                                                    <input type="text" class="form-control" name="nombreL" id="nombreLista" placeholder="Nombre de la lista" required>
+                                                    <span class="small" id="msjNombre"></span>
+                                                </div>                                               
                                             </div>
                                             
                                             
                                             <div class="row">
-                                                <div class="col-md-5">
+                                                <div class="col-4 col-md-3">
                                                     <label class="">Privacidad</label>
                                                 </div>
-                                                <div class="custom-control custom-radio">
+                                                <div class="custom-control custom-radio col-4 col-md-3">
                                                     <input id="publico" name="privacidad" value="PUBLICO" type="radio" class="custom-control-input" checked>
                                                     <label class="custom-control-label" for="publico">Publico</label>
                                                 </div>
-                                                <div class="custom-control custom-radio">
+                                                <div class="custom-control custom-radio col-4  col-md-3">
                                                     <input id="privado" name="privacidad" value="PRIVADO" type="radio" class="custom-control-input">
                                                     <label class="custom-control-label" for="privado">Privado</label>
                                                 </div>
+                                                <div class="col-0 col-md-3"></div>
                                             </div>
-                                            <div class=" bd-light">
-                                                <select class="custom-select d-block w-100" name="categoria" id="categoria" required>
-                                                    <%
-                                                        for (String l : Categorias) {
-                                                    %>
-                                                    <option> <%= l%>  </option> 
-                                                    <%
-                                                        }
-                                                    %>
-                                                </select>
+                                            <div class=" bd-light row">
+                                                <div class="col-md-12">
+                                                    <select class="custom-select d-block w-100" name="categoria" id="categoria" required>
+                                                        <%
+                                                            for (String l : Categorias) {
+                                                        %>
+                                                        <option> <%= l%>  </option> 
+                                                        <%
+                                                            }
+                                                        %>
+                                                    </select>
+                                                </div>                                                
                                             </div>
 
                                             <hr class="mb-4">
diff --git a/UyTube_web/web/AltaUsuario.jsp b/UyTube_web/web/AltaUsuario.jsp
index 54cd0bb1a45b893b3cec8b3068b94a0229f0b178..7f2be071db8848fd31c424ef9e2c1f21385ba161 100644
--- a/UyTube_web/web/AltaUsuario.jsp
+++ b/UyTube_web/web/AltaUsuario.jsp
@@ -10,24 +10,6 @@
     <%
         boolean sesionIniciada = (boolean) (request.getSession().getAttribute("usuario") != null);
     %>
-    <script>
-        var check = function () {
-            if (document.getElementById('input_Contrasenia').value ==document.getElementById('input_Repetir_contraseña').value) {
-                document.getElementById('message').style.color = 'green';
-                document.getElementById('message').innerHTML = 'Correcto';
-                document.getElementById("btn_Registrarme").disabled = false;
-                if (document.getElementById('input_Contrasenia').value == ""){
-                    document.getElementById('message').style.color = 'red';
-                    document.getElementById('message').innerHTML = 'Ingrese la contraseña';
-                    document.getElementById("btn_Registrarme").disabled = true;
-                }
-            } else {
-                document.getElementById('message').style.color = 'red';
-                document.getElementById('message').innerHTML = 'No son iguales';
-                document.getElementById("btn_Registrarme").disabled = true;
-            }
-        }
-    </script>
 
     <head>
         <meta charset="UTF-8">
@@ -49,11 +31,13 @@
         <div class="container-fluid" style="padding-left: 0; padding-right: 0px;">
             <div class="row">
                 <div class="col-12">
+
                     <%
                         if (sesionIniciada) {
                     %>
                     <%@ include file='include/header-usuario.jsp' %>
-                    <%                    } else {
+                    <%
+                        } else {
                     %>
                     <%@ include file='include/header-visitante.jsp' %>
                     <%
@@ -77,7 +61,8 @@
                             if (sesionIniciada) {
                         %>
                         <%@ include file='include/menu-usuario.jsp' %>
-                        <%                        } else {
+                        <%
+                            } else {
                         %>
                         <%@ include file='include/menu-visitante.jsp' %>
                         <%
@@ -86,13 +71,13 @@
                         <div class="contenido">
                             <section class="contenido-flexible">
                                 <div class="principal d-flex flex-row justify-content-center">
-                                    <section class="d-flex  flex-lg-row flex-wrap justify-content-lg-between">					
-                                        <form class="form-signin" action="/uytube/usuario-agregar" method="post">
+                                    <section class="d-flex  flex-lg-row flex-wrap justify-content-lg-between">
+                                        <form class="form-signin" action="/uytube/usuario-agregar" method="post" enctype="multipart/form-data">
                                             <h1 class="h3 mb-3 font-weight-normal" id="Texto_ingrese">Ingrese sus datos</h1><br>
                                             <input class="form-control" type="text" name="nickname" placeholder="Nickname" id="input_Nickname" required>
-                                            <span id="msjNickname"></span>
+                                            <span class="small" id="msjNickname"></span>
                                             <br>
-                                            
+
                                             <div class="row">
                                                 <div class="col-md-6 mb-3">
                                                     <input type="text" class="form-control" name="nombre" id="input_Nombre" placeholder="Nombre" required>
@@ -103,13 +88,13 @@
                                             </div>
 
                                             <input class="form-control" type="email" name="email" placeholder="Email" id="email" required>
-                                            <span id="msjEmail"></span>
+                                            <span class="small" id="msjEmail"></span>
                                             <br>
 
                                             <input class="form-control" name="fechaNa" type="date" id="input_fecha" name="trip-start"><br>
                                             <input class="form-control" type="password" name="password" placeholder="Contraseña" id="input_Contrasenia" onkeyup="check()" required><br>
                                             <input class="form-control" type="password" placeholder="Repita contraseña" id="input_Repetir_contraseña" onkeyup="check()" required>
-                                            <span id='message'></span>
+                                            <span class="small" id='message'></span>
 
                                             <div class="d-block my-3">
                                                 <label for="cc-name">Privacidad del canal</label>
@@ -132,10 +117,9 @@
 
 
                                             <label id="label_email">Imagen de perfil</label>
-
+                                            
                                             <div class="form-group">
-                                                <input disabled="true" accept=".PNG,.JPG,.jpg,.png" name="imagen" id="input_Imagen_Perfil" type="file" class="file" multiple=false data-preview-file-type="any"><br>
-                                                <span id='message'>(Funcionalidad no disponible)</span><br>
+                                                <input id="input_Imagen_Perfil" name="imagen" accept=".PNG,.JPG,.jpg,.png" type="file" class="file" multiple=false data-preview-file-type="any"><br>
                                                 <small class="text-muted">Opcional*</small>
                                             </div>
 
diff --git a/UyTube_web/web/AltaVideo.jsp b/UyTube_web/web/AltaVideo.jsp
index 95d22f1bcf5ae20354f2e791e5fcba09cd7a48ba..4bd6e60d5e44e532487d661391c720d3b01a7b3b 100644
--- a/UyTube_web/web/AltaVideo.jsp
+++ b/UyTube_web/web/AltaVideo.jsp
@@ -100,7 +100,7 @@
                                         <div class="form-group col-md-2">
                                             
                                         </div>
-                                        <div class="form-group col-8 col-md-7">
+                                        <div class="form-group col-8 col-md-6">
                                             <label for="inputCategoria">Categoría</label>
                                             <select id="inputCategoria" name="categoria" class="form-control">
                                                 <%
diff --git a/UyTube_web/web/Buscar.jsp b/UyTube_web/web/Buscar.jsp
index 37bd38d9a9e97d59259d57b67d3180f21c82cd1c..1ef79e6a9b68a15953f72879f61ce83b05091c48 100644
--- a/UyTube_web/web/Buscar.jsp
+++ b/UyTube_web/web/Buscar.jsp
@@ -84,7 +84,7 @@
 
                                     <!-- BOTONES DESPLEGABLES-->
 
-                                    <%@ include file='include/filtro-visible.html' %>
+                                    <%@ include file='include/filtro-visible.jsp' %>
 
                                     <!--FIN DE LOS BOTONES-->
 
@@ -152,18 +152,12 @@
                                                     DtCanal e = (DtCanal) o;
                                                     // buena suerte entendiendo esto...
                                                     DtUsuario usu = Fabrica.getInstancia().getIUsuario().obtenerPropietarioDeCanal(e.getId());
-                                                    String imagenCanal;
-                                                    if (usu.getImagen() == null || usu.getImagen().equals("")){
-                                                        imagenCanal = "imagenes/ukp.png";
-                                                    }else{
-                                                        imagenCanal = usu.getImagen();
-                                                    }
                                         %>
                                         <div class="canal bd-highlight">
                                             <div class="bd-highlight caja-imagen">
                                                 <div class="bd-highlight">
                                                     <a href="usuario-consultar?id=<%= usu.getNickname() %>">
-                                                       <img src="<%= imagenCanal %>" class="align-self-center rounded-circle" alt="Cinque Terre" >
+                                                       <img src="usuario-imagen?id=<%= usu.getNickname() %>" class="align-self-center rounded-circle" alt="Cinque Terre" >
                                                     </a>
                                                 </div>
                                             </div>
diff --git a/UyTube_web/web/ConsultaUsuario.jsp b/UyTube_web/web/ConsultaUsuario.jsp
index ba441e947b02cecea9389e1f9e015d8badb091a0..7747bc6cc8b25a6746dc00ae86c442396462cc96 100644
--- a/UyTube_web/web/ConsultaUsuario.jsp
+++ b/UyTube_web/web/ConsultaUsuario.jsp
@@ -91,20 +91,9 @@
                                         <div class="p-4 flex-fill bd-highlight">
                                             <div class="d-flex justify-content-center">
                                                 <%
-                                                    String textoAlternativo;
-                                                    String rutaDeImagenDePerfil;
-                                                    if (usuario.getImagen() == null || usuario.getImagen().equals("")) {
-                                                        rutaDeImagenDePerfil = "imagenes/ukp.png";
-                                                        textoAlternativo = "Imagen de perfil por defecto";
-                                                    } else {
-                                                        rutaDeImagenDePerfil = usuario.getImagen();
-                                                        textoAlternativo = "Imagen de perfil de " + usuario.getNickname();
-                                                        //char contrabarra = 92;
-                                                        //char barra = 47;
-                                                        //rutaImagenPerfil = rutaImagenPerfil = rutaImagenPerfil.replace(contrabarra, barra);
-                                                    }
+                                                    // src="<%
                                                 %>
-                                                <img src="<%=rutaDeImagenDePerfil%>" class="rounded-circle" alt="<%=textoAlternativo%>" width="180" height="180"> 
+                                                <img src="usuario-imagen?id=<%= usuario.getNickname() %>" class="rounded-circle" alt="Imagen de perfil de <% usuario.getNickname(); %>" width="180" height="180"> 
                                             </div>
                                         </div>
                                             
@@ -112,12 +101,12 @@
                                         <div class="p-1 flex-fill bd-highlight ">
                                             
                                             <div class="d-flex bd-highlight ">
-                                                <div class="p-1 d-flex flex-fill bd-highlight">
+                                                <div class="p-1 d-flex flex-wrap flex-sm-nowrap bd-highlight">
                                                     <br><h3><%= usuario.getNombre() + " " + usuario.getApellido()%></h3>
                                                     <%
                                                     if (sesionIniciada && propietario) {
                                                     %>
-                                                        <button  data-toggle="modal" data-target="#exampleModal" data-whatever="@mdo" class=" ml-5 btn btn-danger icon-remove-user" id="btnBaja">
+                                                        <button  data-toggle="modal" data-target="#exampleModal" data-whatever="@mdo" class=" ml-sm-3 btn btn-danger icon-remove-user" id="btnBaja">
                                                             Darse de baja
                                                         </button>
                                                     <%  
@@ -139,7 +128,7 @@
                                                 </div>
                                             </div>
                                             <div class="p-1 bd-highlight ">
-                                                <div class="d-flex bd-highlight ">
+                                                <div class="d-flex flex-wrap flex-md-nowrap bd-highlight ">
                                                     <div class="p-1 flex-fill bd-highlight ">
                                                         <p>PRIVACIDAD: <%= canal.getPrivacidad()%></p>
                                                     </div>
diff --git a/UyTube_web/web/ConsultaVideo.jsp b/UyTube_web/web/ConsultaVideo.jsp
index 87d36975abc9b3dffd9386af509ed21bf7b584c5..56ffba0f7b37979dbc9917367ec1793b81bc2297 100644
--- a/UyTube_web/web/ConsultaVideo.jsp
+++ b/UyTube_web/web/ConsultaVideo.jsp
@@ -4,6 +4,7 @@
     Author     : administrador
 --%>
 
+<%@page import="Logica.Enumerados.Privacidad"%>
 <%@page import="java.text.SimpleDateFormat"%>
 <%@page import="Logica.Enumerados.TipoValoracion"%>
 <%@page import="Logica.DataType.DtValoracion"%>
@@ -31,6 +32,7 @@
         String htmlComentarios = (String) request.getAttribute("comentarios");
         DtValoracion valoracionDada = (DtValoracion) request.getAttribute("valoracionDada");
         ArrayList<DtValoracion> valoraciones = (ArrayList) request.getAttribute("valoraciones");
+        ArrayList<DtListaDeReproduccion> listas = (ArrayList) request.getAttribute("listas");
     %>
     <head>
         <meta charset="UTF-8">
@@ -56,8 +58,7 @@
                         if (sesionIniciada) {
                     %>
                     <%@ include file='include/header-usuario.jsp' %>
-                    <%
-                        } else {
+                    <%                    } else {
                     %>
                     <%@ include file='include/header-visitante.jsp' %>
                     <%
@@ -82,12 +83,10 @@
                             if (sesionIniciada) {
                         %>
                         <%@ include file='include/menu-usuario.jsp' %>
-                        <%
-                            } else {
+                        <%                        } else {
                         %>
                         <%@ include file='include/menu-visitante.jsp' %>
-                        <%
-                            }
+                        <%                            }
                         %>
 
                         <div class="contenido">
@@ -154,8 +153,8 @@
                                         </div>
 
                                         <!-- Boton agregar a lista de reproduccion -->
-                                        <div class="p-2 btn-group mr-3" role="group" aria-label="Third group">
-                                            <button type="button" id="btnAgregarALista" class="btn btn-info icon-add-to-list">
+                                        <div class="p-2 btn-group mr-3" role="group" aria-label="Third group">                                            
+                                            <button data-toggle="modal" type="button" id="btnAgregarALista" data-target="#ventanaModalAgregarALista" class="btn btn-info icon-add-to-list">
                                                 LISTA DE REPRODUCCIÓN
                                             </button>
                                         </div>
@@ -170,7 +169,7 @@
                                                     MODIFICAR
                                                 </button>
                                             </a>
-                                             <button href="#ventanaModalValoraciones" data-toggle="modal" type="button" id="btnListarValoraciones" class="btn btn-info icon-info-with-circle">
+                                            <button href="#ventanaModalValoraciones" data-toggle="modal" type="button" id="btnListarValoraciones" class="btn btn-info icon-info-with-circle">
                                                 QUIÉN VALORÓ
                                             </button>
                                         </div>
@@ -188,15 +187,8 @@
                                     <!-- IMAGEN DEL USUARIO Y NOMBRE DEL CANAL -->
                                     <div class="row">
                                         <%
-                                            String textoAlternativo;
-                                            String rutaDeImagenDePerfil;
-                                            if (usuario.getImagen() == null || usuario.getImagen().equals("")) {
-                                                rutaDeImagenDePerfil = "imagenes/ukp.png";
-                                                textoAlternativo = "Imagen de perfil por defecto";
-                                            } else {
-                                                rutaDeImagenDePerfil = usuario.getImagen();
-                                                textoAlternativo = "Imagen de perfil de " + usuario.getNickname();
-                                            }
+                                            String textoAlternativo = "Imagen de perfil de " + usuario.getNickname();
+                                            String rutaDeImagenDePerfil = "usuario-imagen?id=" + usuario.getNickname();
                                         %>
                                         <div class="bd-highlight">
                                             <img class="align-self-center mr-3" src="<%= rutaDeImagenDePerfil%>" width="70" height="70" alt="<%= textoAlternativo%>">
@@ -345,7 +337,62 @@
             }
         </style>
 
-        
+        <!-- Modal Agregar a lista de reproduccion -->
+        <%    
+            if (sesionIniciada){
+        %>
+        <div class="modal fade" id="ventanaModalAgregarALista" tabindex="-1" role="dialog" aria-labelledby="exampleModalScrollableTitle" aria-hidden="true">
+            <div class="modal-dialog modal-dialog-scrollable" role="document">
+                <div class="modal-content">
+                    <div class="modal-header">
+                        <h5 class="modal-title" id="exampleModalScrollableTitle">Guardar en ...</h5>
+                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                            <span aria-hidden="true">&times;</span>
+                        </button>
+                    </div>
+                    <div class="modal-body">
+                        <% 
+                            IUsuario sys = Fabrica.getInstancia().getIUsuario();
+                            String idLista, nombreList, icono, checked, idCheckbox; 
+                            sys.seleccionarUsuario(sys.obtenerUsuarioActual().getNickname());
+                            for (DtListaDeReproduccion dl : listas) {
+                                idLista = String.valueOf(dl.getId());
+                                idCheckbox = "checkbox"+idLista;
+                                nombreList = dl.getNombre();
+                                if( dl.getPrivacidad() == Privacidad.PRIVADO){
+                                    icono = "icon-lock1";
+                                }else{
+                                    icono = "icon-earth";
+                                }
+                                sys.seleccionarListaDeReproduccion(dl.getId());
+                                checked = "";
+                                for (DtVideo dv : sys.listarVideosDeListaDeReproduccion()) {
+                                    if( video.getId() == dv.getId()){
+                                        checked = "checked";
+                                        break;
+                                    }
+                                }    
+                        %>
+                        <div class="form-check">
+                            <input class="form-check-input checkLista" type="checkbox" <%= checked %> value="<%= idLista %>" id="<%=idCheckbox%>">
+                            <label class="form-check-label" for="<%=idCheckbox%>"><%= nombreList %> <span class="<%= icono%>"></span></label>
+                        </div>
+                        <%
+                            }
+                            sys.seleccionarUsuario(sys.obtenerPropietarioDeVideo(video.getId()).getNickname());
+                        %>
+                    </div>
+                    <div class="modal-footer">
+                        <button type="button" class="btn btn-info" data-dismiss="modal">Cerrar</button>
+
+                    </div>
+                </div>
+            </div>
+        </div>
+
+        <%
+            }
+        %>
         <%@ include file='include/widgets.html' %>
         <%@ include file='include/footer.html' %>
 
diff --git a/UyTube_web/web/ModificarUsuario.jsp b/UyTube_web/web/ModificarUsuario.jsp
index 65e1173d63d035705023306cd2e9f0d2bd118414..fd016fe718e944895bee156c9a1567d7e74946aa 100644
--- a/UyTube_web/web/ModificarUsuario.jsp
+++ b/UyTube_web/web/ModificarUsuario.jsp
@@ -99,7 +99,7 @@
                             <section class="contenido-flexible">							
                                 <div class="principal d-flex flex-row justify-content-center">
                                     <section class="d-flex  flex-lg-row flex-wrap justify-content-lg-between">					
-                                        <form class="form-signin" action="/uytube/usuario-modificar" method="post">
+                                        <form class="form-signin" action="usuario-modificar" method="post" enctype="multipart/form-data">
                                             <h1 class="h3 mb-3 font-weight-normal" id="Texto_ingrese">Ingrese sus datos</h1><br>
                                             <input value="<%= usuario.getNickname()%>" class="form-control" type="text" name="nickname" readonly="readonly" placeholder="Nickname" id="input_Nickname" required><br>
                                             <div class="row">
@@ -168,11 +168,9 @@
                                             <br>   
                                             <label id="label_email">Imagen de perfil</label>	
                                             <div class="form-group">
-                                                <input disabled="true" name="imagen" id="input_Imagen_Perfil" type="file" class="file" multiple=false data-preview-file-type="any"><br>
-                                                <span id='message'>(Funcionalidad no disponible)</span><br>
+                                                <input id="input_Imagen_Perfil" name="imagen" accept=".PNG,.JPG,.jpg,.png" type="file" class="file" multiple=false data-preview-file-type="any"><br>
                                             </div>
 
-
                                             <hr class="mb-4">
 
                                             <div class="btn-toolbar" role="toolbar" aria-label="Toolbar with button groups">
diff --git a/UyTube_web/web/css/.sass-cache/c5945467622b764634fe3b9fcf530060a0a026da/contenido-alta-lista.sassc b/UyTube_web/web/css/.sass-cache/c5945467622b764634fe3b9fcf530060a0a026da/contenido-alta-lista.sassc
new file mode 100644
index 0000000000000000000000000000000000000000..97d4220d1b38231dd3657535f3aa18517156292c
Binary files /dev/null and b/UyTube_web/web/css/.sass-cache/c5945467622b764634fe3b9fcf530060a0a026da/contenido-alta-lista.sassc differ
diff --git a/UyTube_web/web/css/.sass-cache/c5945467622b764634fe3b9fcf530060a0a026da/contenido-consulta-usuario.sassc b/UyTube_web/web/css/.sass-cache/c5945467622b764634fe3b9fcf530060a0a026da/contenido-consulta-usuario.sassc
new file mode 100644
index 0000000000000000000000000000000000000000..15d8ed923c763b3b522a18e4420914be2e693f23
Binary files /dev/null and b/UyTube_web/web/css/.sass-cache/c5945467622b764634fe3b9fcf530060a0a026da/contenido-consulta-usuario.sassc differ
diff --git a/UyTube_web/web/css/contenido-alta-lista.css b/UyTube_web/web/css/contenido-alta-lista.css
new file mode 100644
index 0000000000000000000000000000000000000000..0824b967585b7807b11a61a0f9d6dda1832cc265
--- /dev/null
+++ b/UyTube_web/web/css/contenido-alta-lista.css
@@ -0,0 +1,106 @@
+.principal {
+  background-color: #f6f6f6;
+  min-height: 800px;
+  border-bottom: 2px solid #5aa1e3;
+  border-top: 2px solid #5aa1e3;
+  width: 100%; }
+
+.contenido {
+  background-color: #f6f6f6;
+  padding: 16px;
+  margin-left: auto;
+  margin-right: auto;
+  width: 1070px;
+  height: 100%; }
+  .contenido .contenido-flexible {
+    background-color: #f6f6f6;
+    margin-bottom: 16px;
+    display: flex;
+    flex-direction: row;
+    justify-content: space-between;
+    flex-wrap: wrap;
+    flex-grow: 0;
+    flex-shrink: 0; }
+    .contenido .contenido-flexible h3 {
+      width: 100%; }
+
+@media (max-width: 340px) {
+  .container-fluid {
+    padding-left: 0px;
+    padding-right: 0px; }
+
+  .contenido {
+    width: 100%;
+    padding-left: 2px;
+    padding-right: 2px; }
+    .contenido .contenido-flexible {
+      width: 100%;
+      justify-content: flex-start; } }
+@media (min-width: 341px) and (max-width: 387px) {
+  .container-fluid {
+    padding-left: 0px;
+    padding-right: 0px; }
+
+  .contenido {
+    width: 330px;
+    padding-left: 2px;
+    padding-right: 2px; }
+    .contenido .contenido-flexible {
+      width: 100%;
+      justify-content: flex-start; } }
+@media (min-width: 388px) and (max-width: 500px) {
+  .container-fluid {
+    padding-left: 0px;
+    padding-right: 0px; }
+
+  .contenido {
+    width: 388px;
+    padding-left: 2px;
+    padding-right: 2px; }
+    .contenido .contenido-flexible {
+      width: 100%;
+      justify-content: flex-start; }
+    .contenido .h3 {
+      width: 90%; } }
+@media (min-width: 501px) and (max-width: 575.98px) {
+  .container-fluid {
+    padding-left: 0px;
+    padding-right: 0px; }
+
+  .contenido {
+    width: 501px; }
+    .contenido .contenido-flexible {
+      width: 100%;
+      justify-content: flex-start; } }
+@media (min-width: 576px) and (max-width: 767.98px) {
+  .container-fluid {
+    padding-left: 0px;
+    padding-right: 0px; }
+
+  .contenido {
+    width: 576px; }
+    .contenido .contenido-flexible {
+      width: 100%;
+      justify-content: flex-start; } }
+@media (min-width: 768px) and (max-width: 991.98px) {
+  .container-fluid {
+    padding-left: 0px;
+    padding-right: 0px; }
+
+  .contenido {
+    width: 664px; }
+    .contenido .contenido-flexible {
+      width: 100%;
+      justify-content: flex-start; } }
+@media (min-width: 992px) {
+  .container-fluid {
+    padding-left: 0px;
+    padding-right: 0px; }
+
+  .contenido {
+    width: 35%; }
+    .contenido .contenido-flexible {
+      width: 100%;
+      justify-content: flex-start; } }
+
+/*# sourceMappingURL=contenido-alta-lista.css.map */
diff --git a/UyTube_web/web/css/contenido-alta-lista.css.map b/UyTube_web/web/css/contenido-alta-lista.css.map
new file mode 100644
index 0000000000000000000000000000000000000000..c43e1c97dfaea00cf935e742fbc970b3cc26638f
--- /dev/null
+++ b/UyTube_web/web/css/contenido-alta-lista.css.map
@@ -0,0 +1,7 @@
+{
+"version": 3,
+"mappings": "AAEA,UAAU;EACN,gBAAgB,ECUH,OAAO;EDTpB,UAAU,EAAE,KAAK;EACjB,aAAa,EAAE,iBAA4B;EAC3C,UAAU,EAAE,iBAA4B;EACxC,KAAK,EAAE,IAAI;;AAEf,UAAU;EACN,gBAAgB,ECGH,OAAO;EDFpB,OAAO,EAAE,IAAI;EACb,WAAW,EAAE,IAAI;EACjB,YAAY,EAAE,IAAI;EAClB,KAAK,EAAE,MAAM;EACb,MAAM,EAAE,IAAI;EACZ,8BAAmB;IACf,gBAAgB,ECJP,OAAO;IDKhB,aAAa,EAAE,IAAI;IACnB,OAAO,EAAE,IAAI;IACb,cAAc,EAAE,GAAG;IACnB,eAAe,EAAE,aAAa;IAC9B,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,CAAC;IACZ,WAAW,EAAE,CAAC;IACd,iCAAE;MACE,KAAK,EAAE,IAAI;;AAIvB,yBAAyB;EACrB,gBAAgB;IACZ,YAAY,EAAE,GAAG;IACjB,aAAa,EAAE,GAAG;;EAGtB,UAAU;IACN,KAAK,EAAE,IAAI;IACX,YAAY,EAAE,GAAG;IACjB,aAAa,EAAE,GAAG;IAClB,8BAAmB;MACf,KAAK,EAAE,IAAI;MACX,eAAe,EAAE,UAAU;AAIvC,gDAAgD;EAC5C,gBAAgB;IACZ,YAAY,EAAE,GAAG;IACjB,aAAa,EAAE,GAAG;;EAGtB,UAAU;IACN,KAAK,EAAE,KAAK;IACZ,YAAY,EAAE,GAAG;IACjB,aAAa,EAAE,GAAG;IAClB,8BAAmB;MACf,KAAK,EAAE,IAAI;MACX,eAAe,EAAE,UAAU;AAKvC,gDAAgD;EAC5C,gBAAgB;IACZ,YAAY,EAAE,GAAG;IACjB,aAAa,EAAE,GAAG;;EAGtB,UAAU;IACN,KAAK,EAAE,KAAK;IACZ,YAAY,EAAE,GAAG;IACjB,aAAa,EAAE,GAAG;IAClB,8BAAmB;MACf,KAAK,EAAE,IAAI;MACX,eAAe,EAAE,UAAU;IAE/B,cAAG;MACC,KAAK,EAAE,GAAG;AAItB,mDAAmD;EAC/C,gBAAgB;IACZ,YAAY,EAAE,GAAG;IACjB,aAAa,EAAE,GAAG;;EAGtB,UAAU;IACN,KAAK,EAAE,KAAK;IACZ,8BAAmB;MACf,KAAK,EAAE,IAAI;MACX,eAAe,EAAE,UAAU;AAIvC,mDAAmD;EAC/C,gBAAgB;IACZ,YAAY,EAAE,GAAG;IACjB,aAAa,EAAE,GAAG;;EAGtB,UAAU;IACN,KAAK,EAAE,KAAK;IACZ,8BAAmB;MACf,KAAK,EAAE,IAAI;MACX,eAAe,EAAE,UAAU;AAIvC,mDAAmD;EAC/C,gBAAgB;IACZ,YAAY,EAAE,GAAG;IACjB,aAAa,EAAE,GAAG;;EAGtB,UAAU;IACN,KAAK,EAAE,KAAK;IACZ,8BAAmB;MACf,KAAK,EAAE,IAAI;MACX,eAAe,EAAE,UAAU;AAIvC,yBAAyB;EACrB,gBAAgB;IACZ,YAAY,EAAE,GAAG;IACjB,aAAa,EAAE,GAAG;;EAEtB,UAAU;IACN,KAAK,EAAE,GAAG;IACV,8BAAmB;MACf,KAAK,EAAE,IAAI;MACX,eAAe,EAAE,UAAU",
+"sources": ["contenido-alta-lista.sass","_colores.sass"],
+"names": [],
+"file": "contenido-alta-lista.css"
+}
\ No newline at end of file
diff --git a/UyTube_web/web/css/contenido-alta-lista.sass b/UyTube_web/web/css/contenido-alta-lista.sass
new file mode 100644
index 0000000000000000000000000000000000000000..f1ed6fab5afd0c17030e6087969af99b68eb3fda
--- /dev/null
+++ b/UyTube_web/web/css/contenido-alta-lista.sass
@@ -0,0 +1,139 @@
+@import _colores
+
+.principal
+    background-color: $colorGrisClaro
+    min-height: 800px
+    border-bottom: 2px solid $colorCelesteClaro
+    border-top: 2px solid $colorCelesteClaro
+    width: 100%
+
+.contenido    
+    background-color: $colorGrisClaro
+    padding: 16px
+    margin-left: auto
+    margin-right: auto
+    width: 1070px   
+    height: 100%
+    .contenido-flexible
+        background-color: $colorGrisClaro
+        margin-bottom: 16px
+        display: flex
+        flex-direction: row
+        justify-content: space-between
+        flex-wrap: wrap
+        flex-grow: 0
+        flex-shrink: 0
+        h3
+            width: 100%
+        
+
+// Para un maximo de 340px ================================================================================  
+@media (max-width: 340px) 
+    .container-fluid
+        padding-left: 0px
+        padding-right: 0px
+    
+    //estilos del contenido principal
+    .contenido
+        width: 100%
+        padding-left: 2px
+        padding-right: 2px
+        .contenido-flexible
+            width: 100%
+            justify-content: flex-start
+            
+
+// Para dispositivos mayores a 340 y menores a 388 ==============================================================
+@media (min-width: 341px) and (max-width: 387px)
+    .container-fluid
+        padding-left: 0px
+        padding-right: 0px
+    
+    //estilos del contenido principal
+    .contenido
+        width: 330px
+        padding-left: 2px
+        padding-right: 2px
+        .contenido-flexible
+            width: 100%
+            justify-content: flex-start
+            
+   
+    
+// Para dispositivos mayores a 387 y menores a 500 ================================================================
+@media (min-width: 388px) and (max-width: 500px)
+    .container-fluid
+        padding-left: 0px
+        padding-right: 0px
+    
+    //estilos del contenido principal
+    .contenido
+        width: 388px
+        padding-left: 2px
+        padding-right: 2px
+        .contenido-flexible
+            width: 100%
+            justify-content: flex-start
+            
+        .h3
+            width: 90%
+      
+        
+// Extra small devices (portrait phones, less than 576px) =======================================================
+@media (min-width: 501px) and (max-width: 575.98px)
+    .container-fluid
+        padding-left: 0px
+        padding-right: 0px
+    
+    //Estilos del contenido principal
+    .contenido
+        width: 501px
+        .contenido-flexible
+            width: 100%
+            justify-content: flex-start
+            
+
+// Small devices (landscape phones, 576px and up) ================================================================
+@media (min-width: 576px) and (max-width: 767.98px)
+    .container-fluid
+        padding-left: 0px
+        padding-right: 0px
+    
+    //Estilos del contenido principal
+    .contenido
+        width: 576px
+        .contenido-flexible
+            width: 100%
+            justify-content: flex-start
+            
+
+// Medium devices (tablets, 768px and up)
+@media (min-width: 768px) and (max-width: 991.98px)
+    .container-fluid
+        padding-left: 0px
+        padding-right: 0px
+    
+    //Estilos del contenido principal
+    .contenido
+        width: 664px
+        .contenido-flexible
+            width: 100%
+            justify-content: flex-start
+    
+    
+// Large devices (desktops, 992px and up) =======================================================================
+@media (min-width: 992px)
+    .container-fluid
+        padding-left: 0px
+        padding-right: 0px
+    //Estilos del contenido principal
+    .contenido
+        width: 35%
+        .contenido-flexible
+            width: 100%
+            justify-content: flex-start
+
+        
+    
+
+            
\ No newline at end of file
diff --git a/UyTube_web/web/css/contenido-consulta-usuario.css b/UyTube_web/web/css/contenido-consulta-usuario.css
index b29d8f5272751b8c404015a5fd45b1a9ee6b9581..5467961c7a48389bc311824b673220168145543b 100644
--- a/UyTube_web/web/css/contenido-consulta-usuario.css
+++ b/UyTube_web/web/css/contenido-consulta-usuario.css
@@ -23,6 +23,9 @@
     flex-shrink: 0; }
     .contenido .contenido-flexible h3 {
       width: 100%; }
+    .contenido .contenido-flexible #btnBaja, .contenido .contenido-flexible #btnBuscar {
+      height: 38px;
+      min-width: 198px; }
 
 @media (max-width: 340px) {
   .container-fluid {
diff --git a/UyTube_web/web/css/contenido-consulta-usuario.css.map b/UyTube_web/web/css/contenido-consulta-usuario.css.map
new file mode 100644
index 0000000000000000000000000000000000000000..eab302ba3d2e54859f0c43330169acd833fa40af
--- /dev/null
+++ b/UyTube_web/web/css/contenido-consulta-usuario.css.map
@@ -0,0 +1,7 @@
+{
+"version": 3,
+"mappings": "AAEA,UAAU;EACN,gBAAgB,ECUH,OAAO;EDTpB,UAAU,EAAE,KAAK;EACjB,aAAa,EAAE,iBAA4B;EAC3C,UAAU,EAAE,iBAA4B;EACxC,KAAK,EAAE,IAAI;;AAEf,UAAU;EACN,gBAAgB,ECGH,OAAO;EDFpB,OAAO,EAAE,IAAI;EACb,WAAW,EAAE,IAAI;EACjB,YAAY,EAAE,IAAI;EAClB,KAAK,EAAE,MAAM;EACb,MAAM,EAAE,IAAI;EACZ,8BAAmB;IACf,gBAAgB,ECJP,OAAO;IDKhB,aAAa,EAAE,IAAI;IACnB,OAAO,EAAE,IAAI;IACb,cAAc,EAAE,GAAG;IACnB,eAAe,EAAE,aAAa;IAC9B,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,CAAC;IACZ,WAAW,EAAE,CAAC;IACd,iCAAE;MACE,KAAK,EAAE,IAAI;IACf,kFAAoB;MAChB,MAAM,EAAE,IAAI;MACZ,SAAS,EAAE,KAAK;;AAG5B,yBAAyB;EACrB,gBAAgB;IACZ,YAAY,EAAE,GAAG;IACjB,aAAa,EAAE,GAAG;;EAGtB,UAAU;IACN,KAAK,EAAE,IAAI;IACX,YAAY,EAAE,GAAG;IACjB,aAAa,EAAE,GAAG;IAClB,8BAAmB;MACf,KAAK,EAAE,IAAI;MACX,eAAe,EAAE,UAAU;AAIvC,gDAAgD;EAC5C,gBAAgB;IACZ,YAAY,EAAE,GAAG;IACjB,aAAa,EAAE,GAAG;;EAGtB,UAAU;IACN,KAAK,EAAE,KAAK;IACZ,YAAY,EAAE,GAAG;IACjB,aAAa,EAAE,GAAG;IAClB,8BAAmB;MACf,KAAK,EAAE,IAAI;MACX,eAAe,EAAE,UAAU;AAIvC,gDAAgD;EAC5C,gBAAgB;IACZ,YAAY,EAAE,GAAG;IACjB,aAAa,EAAE,GAAG;;EAGtB,UAAU;IACN,KAAK,EAAE,KAAK;IACZ,YAAY,EAAE,GAAG;IACjB,aAAa,EAAE,GAAG;IAClB,8BAAmB;MACf,KAAK,EAAE,IAAI;MACX,eAAe,EAAE,UAAU;IAE/B,cAAG;MACC,KAAK,EAAE,GAAG;AAItB,mDAAmD;EAC/C,gBAAgB;IACZ,YAAY,EAAE,GAAG;IACjB,aAAa,EAAE,GAAG;;EAGtB,UAAU;IACN,KAAK,EAAE,KAAK;IACZ,8BAAmB;MACf,KAAK,EAAE,IAAI;MACX,eAAe,EAAE,UAAU;AAIvC,mDAAmD;EAC/C,gBAAgB;IACZ,YAAY,EAAE,GAAG;IACjB,aAAa,EAAE,GAAG;;EAGtB,UAAU;IACN,KAAK,EAAE,KAAK;IACZ,8BAAmB;MACf,KAAK,EAAE,IAAI;MACX,eAAe,EAAE,UAAU;AAIvC,mDAAmD;EAC/C,gBAAgB;IACZ,YAAY,EAAE,GAAG;IACjB,aAAa,EAAE,GAAG;;EAGtB,UAAU;IACN,KAAK,EAAE,KAAK;IACZ,8BAAmB;MACf,KAAK,EAAE,IAAI;MACX,eAAe,EAAE,UAAU;AAIvC,yBAAyB;EACrB,gBAAgB;IACZ,YAAY,EAAE,GAAG;IACjB,aAAa,EAAE,GAAG;;EAEtB,UAAU;IACN,KAAK,EAAE,KAAK;IACZ,8BAAmB;MACf,KAAK,EAAE,IAAI;MACX,eAAe,EAAE,UAAU",
+"sources": ["contenido-consulta-usuario.sass","_colores.sass"],
+"names": [],
+"file": "contenido-consulta-usuario.css"
+}
\ No newline at end of file
diff --git a/UyTube_web/web/css/contenido-consulta-usuario.sass b/UyTube_web/web/css/contenido-consulta-usuario.sass
index d8cbcacf9a64ecba7245ed891383755c7b875361..e3f771ed38d27f3a947b52219d8edc36a11b79b9 100644
--- a/UyTube_web/web/css/contenido-consulta-usuario.sass
+++ b/UyTube_web/web/css/contenido-consulta-usuario.sass
@@ -25,7 +25,9 @@
         flex-shrink: 0
         h3
             width: 100%
-        
+        #btnBaja, #btnBuscar
+            height: 38px
+            min-width: 198px
 
 // Para un maximo de 340px ================================================================================  
 @media (max-width: 340px) 
diff --git a/UyTube_web/web/imagenes/perfiles/JotaJota96.JPG b/UyTube_web/web/imagenes/perfiles/JotaJota96.JPG
deleted file mode 100644
index ceb729c72251514cd8147595e3d3470c5fe008f2..0000000000000000000000000000000000000000
Binary files a/UyTube_web/web/imagenes/perfiles/JotaJota96.JPG and /dev/null differ
diff --git a/UyTube_web/web/imagenes/perfiles/LuC31G.jpg b/UyTube_web/web/imagenes/perfiles/LuC31G.jpg
deleted file mode 100644
index f22efc5908db0af0594d76d75ae3f89ebdff93a6..0000000000000000000000000000000000000000
Binary files a/UyTube_web/web/imagenes/perfiles/LuC31G.jpg and /dev/null differ
diff --git a/UyTube_web/web/imagenes/perfiles/MCBolso.jpg b/UyTube_web/web/imagenes/perfiles/MCBolso.jpg
deleted file mode 100644
index 35469b84ed023de4e5a7581095434bcbf69719d1..0000000000000000000000000000000000000000
Binary files a/UyTube_web/web/imagenes/perfiles/MCBolso.jpg and /dev/null differ
diff --git a/UyTube_web/web/imagenes/perfiles/camilillo15.jpg b/UyTube_web/web/imagenes/perfiles/camilillo15.jpg
deleted file mode 100644
index dc36ba95eecc24c956cbaf03f53dccda2f9317bb..0000000000000000000000000000000000000000
Binary files a/UyTube_web/web/imagenes/perfiles/camilillo15.jpg and /dev/null differ
diff --git a/UyTube_web/web/imagenes/perfiles/jarrieta31.jpg b/UyTube_web/web/imagenes/perfiles/jarrieta31.jpg
deleted file mode 100644
index 421215cb9a5a007be104366f69efa5ea7277d5ea..0000000000000000000000000000000000000000
Binary files a/UyTube_web/web/imagenes/perfiles/jarrieta31.jpg and /dev/null differ
diff --git a/UyTube_web/web/include/filtro-visible.html b/UyTube_web/web/include/filtro-visible.html
deleted file mode 100644
index d9beac175028ea277a6733025224b37f7c69e788..0000000000000000000000000000000000000000
--- a/UyTube_web/web/include/filtro-visible.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<%@page contentType="text/html" pageEncoding="UTF-8"%>
-<!DOCTYPE html>
-
-<!--
- Filtros ocultos
--->
-<div>                                       
-    <div class="form-row">
-        <div class="form-group col-md-3">
-            <label for="inputState">Filtrar por</label>
-            <select id="inputState" class="form-control" name="filtro" form="formBuscar">
-                <option selected>Todo</option>
-                <option>Canales</option>
-                <option>Videos</option>
-                <option>Listas de reproducción</option>
-            </select>
-        </div>
-        <div class="form-group col-md-3">
-            <label for="inputState">Ordenar por</label>
-            <select id="inputState" class="form-control" name="orden" form="formBuscar" >
-                <option selected>Alfabético</option>
-                <option>Fecha</option>
-            </select>
-        </div>
-        <div class="form-group col-md-6">
-
-        </div>
-    </div> 
-</div>
diff --git a/UyTube_web/web/include/filtro-visible.jsp b/UyTube_web/web/include/filtro-visible.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..594d9e5ef3fc357bab34150d2f9bfdcccb8a0241
--- /dev/null
+++ b/UyTube_web/web/include/filtro-visible.jsp
@@ -0,0 +1,67 @@
+<%-- 
+    Document   : filtro-visible
+    Created on : 21/10/2019, 02:00:09 AM
+    Author     : Juan
+--%>
+<%@page import="java.util.ArrayList"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<!DOCTYPE html>
+
+<!--
+ Filtros ocultos
+-->
+<%
+    ArrayList<String> opcionesFiltro = new ArrayList();
+    opcionesFiltro.add("Todo");
+    opcionesFiltro.add("Canales");
+    opcionesFiltro.add("Videos");
+    opcionesFiltro.add("Listas");
+    
+    ArrayList<String> opcionesOrden = new ArrayList();
+    opcionesOrden.add("Alfabético");
+    opcionesOrden.add("Fecha");
+    
+    String opcionFiltroSeleccionado = (String) request.getParameter("filtro");
+    if (opcionFiltroSeleccionado == null){
+        opcionFiltroSeleccionado = "Todo";
+    }
+    String opcionOrdenSeleccionado = (String) request.getParameter("orden");
+    if (opcionOrdenSeleccionado == null){
+        opcionOrdenSeleccionado = "Fecha";
+    }
+%>
+<div>                                       
+    <div class="form-row">
+        <div class="form-group col-md-3">
+            <label for="inputState">Filtrar por</label>
+            <select id="inputState" class="form-control" name="filtro" form="formBuscar">
+                <%                    
+                    for (String s : opcionesFiltro){
+                        String selected = "";
+                        if (opcionFiltroSeleccionado.equals(s)){
+                            selected = "selected";
+                        }
+                %>
+                <option <%= selected %>><%= s %></option>
+                <%}%>
+            </select>
+        </div>
+        <div class="form-group col-md-3">
+            <label for="inputState">Ordenar por</label>
+            <select id="inputState" class="form-control" name="orden" form="formBuscar" >
+                <%                    
+                    for (String s : opcionesOrden){
+                        String selected = "";
+                        if (opcionOrdenSeleccionado.equals(s)){
+                            selected = "selected";
+                        }
+                %>
+                <option <%= selected %>><%= s %></option>
+                <%}%>
+            </select>
+        </div>
+        <div class="form-group col-md-6">
+        </div>
+    </div> 
+</div>
+
diff --git a/UyTube_web/web/include/header-usuario.jsp b/UyTube_web/web/include/header-usuario.jsp
index 5e7be6315c0fb363c4d64fb028c14f37d4327c95..ada77587e67d588f361d5e52cba0c2fd233e48de 100644
--- a/UyTube_web/web/include/header-usuario.jsp
+++ b/UyTube_web/web/include/header-usuario.jsp
@@ -25,7 +25,7 @@ and open the template in the editor.
                     <div class="navbar-dark item-header item-header2">					  
                         <div id="navbarSupportedContent">		
                             <form class="form-inline my-2 my-lg-0 formBuscar" action="/uytube/buscar" id="formBuscar" method="get">
-                                <input class=" mr-sm-2" name="texto" type="search" placeholder="Search" aria-label="Search">
+                                <input class=" mr-sm-2" name="texto" type="search" placeholder="Buscar" aria-label="Search">
                                 <button class="btn btn-primary" id="btnBuscar" type="submit">Buscar</button>
                             </form>
                         </div>
@@ -38,21 +38,9 @@ and open the template in the editor.
                         </div>	
                         <div class="fotoPerfil">
                             <a href="/uytube/usuario-consultar?id=<%= usu.getNickname()%>">
-                                <%
-                                 if (usu.getImagen() == null || usu.getImagen().equals("")) {
-                                %>
-                                    <img id="fotoPerfil" src="imagenes/ukp.png" alt="Perfil">
-                                <%
-                                } else {
-                                %>
-                                    <img id="fotoPerfil" src=<%= usu.getImagen()%> alt="Perfil">
-                                <%
-                                    }
-                                %>
+                                <img id="fotoPerfil" src="usuario-imagen?id=<%= usu.getNickname() %>" alt="Perfil">
                             </a>
                         </div>
-
-
                     </div>
                 </nav>					
             </header>
diff --git a/UyTube_web/web/include/header-visitante.jsp b/UyTube_web/web/include/header-visitante.jsp
index 349551e2da42fb4e7e1de84bb63b1c83d91c996e..4d3b6217036847dcdf0ed3282de284a416098e26 100644
--- a/UyTube_web/web/include/header-visitante.jsp
+++ b/UyTube_web/web/include/header-visitante.jsp
@@ -15,7 +15,7 @@ Header para el visitante
                     <div class="navbar-dark item-header item-header2">					  
                         <div id="navbarSupportedContent">		
                             <form class="form-inline my-2 my-lg-0 formBuscar" action="/uytube/buscar" id="formBuscar" method="get">
-                                <input class=" mr-sm-2" name="texto" type="search" placeholder="Search" aria-label="Search">
+                                <input class=" mr-sm-2" name="texto" type="search" placeholder="Buscar" aria-label="Search">
                                 <button class="btn btn-primary" id="btnBuscar" type="submit">Buscar</button>
                             </form>
                         </div>
diff --git a/UyTube_web/web/index.jsp b/UyTube_web/web/index.jsp
index 46850dfad7c3fd40f98d5f3a7193a0ca457abce0..38d89b90ac32dbf5d20684f1792a4199961bf4c0 100644
--- a/UyTube_web/web/index.jsp
+++ b/UyTube_web/web/index.jsp
@@ -4,6 +4,9 @@
     Author     : administrador
 --%>
 
+<%@page import="com.uytube.AltaUsuario"%>
+<%@page import="java.io.File"%>
+<%@page import="Logica.Fabrica"%>
 <%@page contentType="text/html" pageEncoding="UTF-8"%>
 <!DOCTYPE html>
 <html lang="es">
@@ -35,10 +38,10 @@
                 </div>
             </div>
         </div>
-        
+
          <% response.sendRedirect("presentacion"); %>
-         
-        <%@ include file='include/widgets.html' %>
+        
+         <%@ include file='include/widgets.html' %>
         <%@ include file='include/footer.html' %>
 
         <script src="js/jquery-3.4.1.min_1.js"></script>
diff --git a/UyTube_web/web/js/alta-usuario.js b/UyTube_web/web/js/alta-usuario.js
index 2da3d7565009c6676d5e0c7a2d6255d5bb175b16..0ffcf565e605c8cb99859f50b699e5ec00bd0862 100644
--- a/UyTube_web/web/js/alta-usuario.js
+++ b/UyTube_web/web/js/alta-usuario.js
@@ -13,6 +13,9 @@ $("#input_Nickname").keyup(function(){
         }, function(respuesta, status){
         //alert("Data: " + respuesta + "\nStatus: " + status);
         $("#msjNickname").text(respuesta);
+        if(respuesta == "Este nickname no está disponible"){
+          $("#msjNickname").css("color","red");
+        }
     });
 }); 
 
@@ -33,3 +36,20 @@ $("#email").keyup(function(){
     });
 }); 
 
+var check = function () {
+  if (document.getElementById('input_Contrasenia').value ==document.getElementById('input_Repetir_contraseña').value) {
+      document.getElementById('message').style.color = 'green';
+      document.getElementById('message').innerHTML = 'Correcto';
+      document.getElementById("btn_Registrarme").disabled = false;
+      if (document.getElementById('input_Contrasenia').value == ""){
+          document.getElementById('message').style.color = 'red';
+          document.getElementById('message').innerHTML = 'Ingrese la contraseña';
+          document.getElementById("btn_Registrarme").disabled = true;
+      }
+  } else {
+      document.getElementById('message').style.color = 'red';
+      document.getElementById('message').innerHTML = 'No son iguales';
+      document.getElementById("btn_Registrarme").disabled = true;
+  }
+}
+
diff --git a/UyTube_web/web/js/consultar-video.js b/UyTube_web/web/js/consultar-video.js
index 6987dfed7d47d5571b681b2fe8b24d37058e100e..3de6d056f909d4ee9afe57d4615a4416ba48974a 100644
--- a/UyTube_web/web/js/consultar-video.js
+++ b/UyTube_web/web/js/consultar-video.js
@@ -74,14 +74,47 @@ $("#btnCancelar").on('click',function(){
     $("#input_descripcion").val("");
 });
 
-//boton agregar lista de reproduccion
-$("#btnAgregarALista").on('click',function(){
-    $.post("/uytube/video-consultar",
+//boton agregar a lista de reproduccion
+var agregarALista = function(){
+    //$("#agregarALista .close").click(); //Cierra el modal
+    //alert($("#defaultCheck1").value());
+    alert("Diste click");
+    // $.post("/uytube/video-consultar",
+    //     {
+    //       accion: "agregarALista" 
+    //     }, function(respuesta, status){
+        
+    // });
+};
+
+// Checkbox para agregar o quitar de la Lista de Reproduccion
+$(".checkLista").on('change', function(){
+    var id_video = $("#video").attr("value");
+    var id_lista = $(this).val();
+    if($(this).prop('checked') == true){  
+        $.post("/uytube/video-consultar",
         {
-          accion: "agregarALista" 
+          accion: "agregarALista",
+          idVideo: id_video,
+          idLista: id_lista
         }, function(respuesta, status){
-        alert(respuesta);
-    });
+            if(respuesta != "ok"){
+                alert("No se ha podido agregar el video a la lista.")
+            }
+        });
+       
+    }else{
+        $.post("/uytube/video-consultar",
+        {
+          accion: "quitarDeLista",
+          idVideo: id_video,
+          idLista: id_lista
+        }, function(respuesta, status){
+            if(respuesta != "ok"){
+                alert("No se ha podido quitar el video de la lista.")
+            }
+        });
+    }
 });
 
 //boton agregar lista de reproduccion
diff --git a/datos_de_prueba.sql b/datos_de_prueba/datos_de_prueba.sql
similarity index 99%
rename from datos_de_prueba.sql
rename to datos_de_prueba/datos_de_prueba.sql
index ae831187fdb7c1f159b7dfcc6f830c5c54a33633..0c234ac47a821df9f2a30ff356ee2b3158f00a57 100644
--- a/datos_de_prueba.sql
+++ b/datos_de_prueba/datos_de_prueba.sql
@@ -9,6 +9,7 @@ INSERT INTO public.categoria (nombre) VALUES
 ('MUSICA')
 ,('DEPORTE')
 ,('GAMING')
+-- Si te dio error con el undefined, comenta la siguiente linea
 ,('UNDEFINED')
 ;
 
diff --git a/datos_de_prueba/imagenes_de_perfil/JotaJota96.jpg b/datos_de_prueba/imagenes_de_perfil/JotaJota96.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..a899b91dc36e7d8ffbd475090bd6a1d1bec7b556
Binary files /dev/null and b/datos_de_prueba/imagenes_de_perfil/JotaJota96.jpg differ
diff --git a/UyTube_estacion_de_trabajo/Imagenes/perfiles/LuC31G.jpg b/datos_de_prueba/imagenes_de_perfil/LuC31G.jpg
similarity index 100%
rename from UyTube_estacion_de_trabajo/Imagenes/perfiles/LuC31G.jpg
rename to datos_de_prueba/imagenes_de_perfil/LuC31G.jpg
diff --git a/UyTube_estacion_de_trabajo/Imagenes/perfiles/MCBolso.jpg b/datos_de_prueba/imagenes_de_perfil/MCBolso.jpg
similarity index 100%
rename from UyTube_estacion_de_trabajo/Imagenes/perfiles/MCBolso.jpg
rename to datos_de_prueba/imagenes_de_perfil/MCBolso.jpg
diff --git a/UyTube_estacion_de_trabajo/Imagenes/perfiles/camilillo15.jpg b/datos_de_prueba/imagenes_de_perfil/camilillo15.jpg
similarity index 100%
rename from UyTube_estacion_de_trabajo/Imagenes/perfiles/camilillo15.jpg
rename to datos_de_prueba/imagenes_de_perfil/camilillo15.jpg
diff --git a/UyTube_estacion_de_trabajo/Imagenes/perfiles/jarrieta31.jpg b/datos_de_prueba/imagenes_de_perfil/jarrieta31.jpg
similarity index 100%
rename from UyTube_estacion_de_trabajo/Imagenes/perfiles/jarrieta31.jpg
rename to datos_de_prueba/imagenes_de_perfil/jarrieta31.jpg