diff --git a/src/api/identity.rs b/src/api/identity.rs
index 8236b1d7..da361bc7 100644
--- a/src/api/identity.rs
+++ b/src/api/identity.rs
@@ -92,9 +92,9 @@ fn _password_login(data: ConnectData, conn: DbConn, remote: Option<SocketAddr>)
         ))
     }
 
-    let device_type: i32 = util::try_parse_string(data.device_type.as_ref()).expect("Invalid type");
-    let device_id = data.device_identifier.clone().expect("Missing device id");
-    let device_name = data.device_name.clone().expect("Missing device name");
+    let device_type = util::try_parse_string(data.device_type.as_ref()).unwrap_or(0);
+    let device_id = data.device_identifier.clone().unwrap_or_else(|| crate::util::get_uuid());
+    let device_name = data.device_name.clone().unwrap_or("unknown_device".into());
 
     // Find device or create new
     let mut device = match Device::find_by_uuid(&device_id, &conn) {
@@ -325,10 +325,7 @@ fn validate_data(data: &ConnectData) -> EmptyResult {
             _check_is_some(&data.client_id, "client_id cannot be blank")?;
             _check_is_some(&data.password, "password cannot be blank")?;
             _check_is_some(&data.scope, "scope cannot be blank")?;
-            _check_is_some(&data.username, "username cannot be blank")?;
-            _check_is_some(&data.device_identifier, "device_identifier cannot be blank")?;
-            _check_is_some(&data.device_name, "device_name cannot be blank")?;
-            _check_is_some(&data.device_type, "device_type cannot be blank")
+            _check_is_some(&data.username, "username cannot be blank")
         }
     }
 }
diff --git a/src/db/models/cipher.rs b/src/db/models/cipher.rs
index 8caa2e02..fc1eacb7 100644
--- a/src/db/models/cipher.rs
+++ b/src/db/models/cipher.rs
@@ -1,8 +1,6 @@
 use chrono::{NaiveDateTime, Utc};
 use serde_json::Value;
 
-use uuid::Uuid;
-
 use super::{User, Organization, Attachment, FolderCipher, CollectionCipher, UserOrganization, UserOrgType, UserOrgStatus};
 
 #[derive(Debug, Identifiable, Queryable, Insertable, Associations)]
@@ -41,7 +39,7 @@ impl Cipher {
         let now = Utc::now().naive_utc();
 
         Self {
-            uuid: Uuid::new_v4().to_string(),
+            uuid: crate::util::get_uuid(),
             created_at: now,
             updated_at: now,
 
diff --git a/src/db/models/collection.rs b/src/db/models/collection.rs
index 5b5a40c6..962563f7 100644
--- a/src/db/models/collection.rs
+++ b/src/db/models/collection.rs
@@ -1,7 +1,5 @@
 use serde_json::Value;
 
-use uuid::Uuid;
-
 use super::{Organization, UserOrganization, UserOrgType, UserOrgStatus};
 
 #[derive(Debug, Identifiable, Queryable, Insertable, Associations)]
@@ -18,7 +16,7 @@ pub struct Collection {
 impl Collection {
     pub fn new(org_uuid: String, name: String) -> Self {
         Self {
-            uuid: Uuid::new_v4().to_string(),
+            uuid: crate::util::get_uuid(),
 
             org_uuid,
             name,
diff --git a/src/db/models/folder.rs b/src/db/models/folder.rs
index 9e384086..3a932b57 100644
--- a/src/db/models/folder.rs
+++ b/src/db/models/folder.rs
@@ -1,8 +1,6 @@
 use chrono::{NaiveDateTime, Utc};
 use serde_json::Value;
 
-use uuid::Uuid;
-
 use super::{User, Cipher};
 
 #[derive(Debug, Identifiable, Queryable, Insertable, Associations)]
@@ -33,7 +31,7 @@ impl Folder {
         let now = Utc::now().naive_utc();
 
         Self {
-            uuid: Uuid::new_v4().to_string(),
+            uuid: crate::util::get_uuid(),
             created_at: now,
             updated_at: now,
 
diff --git a/src/db/models/organization.rs b/src/db/models/organization.rs
index bddb3dd7..94e2a29a 100644
--- a/src/db/models/organization.rs
+++ b/src/db/models/organization.rs
@@ -1,7 +1,6 @@
 use std::cmp::Ordering;
 use serde_json::Value;
 
-use uuid::Uuid;
 use super::{User, CollectionUser, Invitation};
 
 #[derive(Debug, Identifiable, Queryable, Insertable)]
@@ -159,7 +158,7 @@ impl Organization {
 
     pub fn new(name: String, billing_email: String) -> Self {
         Self {
-            uuid: Uuid::new_v4().to_string(),
+            uuid: crate::util::get_uuid(),
 
             name,
             billing_email,
@@ -206,7 +205,7 @@ impl Organization {
 impl UserOrganization {
     pub fn new(user_uuid: String, org_uuid: String) -> Self {
         Self {
-            uuid: Uuid::new_v4().to_string(),
+            uuid: crate::util::get_uuid(),
 
             user_uuid,
             org_uuid,
diff --git a/src/db/models/two_factor.rs b/src/db/models/two_factor.rs
index 878dafda..1e2c9a57 100644
--- a/src/db/models/two_factor.rs
+++ b/src/db/models/two_factor.rs
@@ -1,7 +1,5 @@
 use serde_json::Value;
 
-use uuid::Uuid;
-
 use super::User;
 
 #[derive(Debug, Identifiable, Queryable, Insertable, Associations)]
@@ -36,7 +34,7 @@ pub enum TwoFactorType {
 impl TwoFactor {
     pub fn new(user_uuid: String, type_: TwoFactorType, data: String) -> Self {
         Self {
-            uuid: Uuid::new_v4().to_string(),
+            uuid: crate::util::get_uuid(),
             user_uuid,
             type_: type_ as i32,
             enabled: true,
diff --git a/src/db/models/user.rs b/src/db/models/user.rs
index d830b601..8f509997 100644
--- a/src/db/models/user.rs
+++ b/src/db/models/user.rs
@@ -1,8 +1,6 @@
 use chrono::{NaiveDateTime, Utc};
 use serde_json::Value;
 
-use uuid::Uuid;
-
 use crate::crypto;
 use crate::CONFIG;
 
@@ -50,7 +48,7 @@ impl User {
         let email = mail.to_lowercase();
 
         Self {
-            uuid: Uuid::new_v4().to_string(),
+            uuid: crate::util::get_uuid(),
             created_at: now,
             updated_at: now,
             name: email.clone(),
@@ -61,7 +59,7 @@ impl User {
             salt: crypto::get_random_64(),
             password_iterations: CONFIG.password_iterations,
 
-            security_stamp: Uuid::new_v4().to_string(),
+            security_stamp: crate::util::get_uuid(),
 
             password_hint: None,
             private_key: None,
@@ -100,7 +98,7 @@ impl User {
     }
 
     pub fn reset_security_stamp(&mut self) {
-        self.security_stamp = Uuid::new_v4().to_string();
+        self.security_stamp = crate::util::get_uuid();
     }
 
     pub fn is_server_admin(&self) -> bool {
diff --git a/src/util.rs b/src/util.rs
index 4bbd145d..33ab85ca 100644
--- a/src/util.rs
+++ b/src/util.rs
@@ -92,6 +92,10 @@ pub fn get_display_size(size: i32) -> String {
     format!("{} {}", size, UNITS[unit_counter])
 }
 
+pub fn get_uuid() -> String {
+    uuid::Uuid::new_v4().to_string()
+}
+
 
 ///
 /// String util methods