diff --git a/scripts/create_group.py b/scripts/create_group.py
index 1a55ebe5aae7a43294515d9940c9198d0dfe353c..6a9e3e11afbd5175278b57a5cc696812b9f840db 100755
--- a/scripts/create_group.py
+++ b/scripts/create_group.py
@@ -1,28 +1,35 @@
 #!/usr/bin/env python3
 
-import os
 import sys
 import json
 import requests
 import subprocess
+import argparse
 
-if len(sys.argv) < 3:
-    print('Usage: ' + sys.argv[0] + ' <token> <group_name> <visibility>')
-    exit(1)
+parser = argparse.ArgumentParser()
+parser.add_argument(
+    "token", help="Create a token here: https://gitedu.hesge.ch/profile/personal_access_tokens")
+parser.add_argument(
+    "group_name", help="The group name.")
+parser.add_argument(
+    "--visibility", help="Group visibility. By default private.")
+args = parser.parse_args()
 
-token = sys.argv[1]
-group_name = sys.argv[2]
-visibility = 'private'
-if len(sys.argv) > 3:
-    visibility = sys.argv[3]
+if args.visibility:
+    visibility = args.visibility
+else:
+    visibility = 'private'
 
 base_url = 'https://gitedu.hesge.ch/api/v4/'
-params = {'path': group_name, 'name': group_name, 'visibility': visibility}
-headers = {'PRIVATE-TOKEN': token}
+params = {'path': args.group_name,
+          'name': args.group_name, 'visibility': visibility}
+headers = {'PRIVATE-TOKEN': args.token}
 
-group = requests.post(base_url + '/groups', params=params, headers=headers).json()
+group = requests.post(base_url + '/groups',
+                      params=params, headers=headers).json()
 if 'message' in group:
     print('Error in creating group: %s' % group)
     exit(1)
 
-print("Group '" + group['name'] + "' with id '" + str(group['id']) + "' and visibility '" + group['visibility'] + "' available at '" + group['web_url'] + "' ;" + str(group['id']))
+print("Group '" + group['name'] + "' with id '" + str(group['id']) + "' and visibility '" +
+      group['visibility'] + "' available at '" + group['web_url'] + "' ;" + str(group['id']))
diff --git a/scripts/create_issues.py b/scripts/create_issues.py
deleted file mode 100755
index 80a27965f42218f8f6e23908c430a97d93d87da3..0000000000000000000000000000000000000000
--- a/scripts/create_issues.py
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env python3
-
-import sys
-import requests
-import string
-import random
-
-if len(sys.argv) < 3:
-    print("Usage: " + sys.argv[0] + " <token> <project_id>")
-    exit(1)
-
-token = sys.argv[1]
-project_id = sys.argv[2]
-
-base_url = "https://githepia.hesge.ch/api/v4/projects"
-params = {"simple": "true"}
-headers = {"PRIVATE-TOKEN": token}
-
-url = "%s/%s/forks" % (base_url, project_id)
-
-repositories = requests.get(url, params=params, headers=headers).json()
-
-alphabet = string.ascii_uppercase
-for repo in repositories:
-    print("create issue for repository %s" % repo['web_url'])
-    issues_url = "%s/%s/issues" % (base_url, repo['id'])
-
-    random_letter = random.choice(alphabet)
-    alphabet.replace(random_letter, "")
-    params = {
-        "title": "You will be modeling the letter %s" % random_letter
-    }
-    new_issue = requests.post(issues_url, params=params, headers=headers)
diff --git a/scripts/create_repo_for_students.py b/scripts/create_repo_for_students.py
index 8909d4944bac799e3b54288bb45babc2127a86b7..e67278e43a98bc12e9d3f9666b049bde742df04f 100755
--- a/scripts/create_repo_for_students.py
+++ b/scripts/create_repo_for_students.py
@@ -4,59 +4,76 @@ import sys
 import json
 import requests
 import subprocess
+import argparse
 
-if len(sys.argv) < 6:
-    print('Usage: ' + sys.argv[0] + ' <token> <import_url> <group_id> <project_name> <student-mail1,student-mail2,...,student-mailN> <expires_at>')
-    exit(1)
-
-token = sys.argv[1]
-import_url = sys.argv[2]
-group_id = sys.argv[3]
-# split '@' in the case when project name = student's email
-project_name = sys.argv[4].split('@')[0]
+parser = argparse.ArgumentParser()
+parser.add_argument(
+    "token", help="Create a token here: https://gitedu.hesge.ch/profile/personal_access_tokens")
+parser.add_argument(
+    "group_id", help="The group id (int) where to store the created new project.")
+parser.add_argument(
+    "emails", help="Emails list of students working in this project, separated by commas (email1,email2).")
+parser.add_argument(
+    "-n", "--name", help="The project name. If blank, take the first student name (from email) as name.")
+parser.add_argument("-i", "--import_url",
+                    help="Import the publicly accessible project by URL given here (optional).")
+parser.add_argument("-x", "--expires_at",
+                    help="Expiration date to kick off students from this project, at 00:00:00. YYYY-MM-DD format (optional).")
+args = parser.parse_args()
 
 base_url = 'https://gitedu.hesge.ch/api/v4'
-headers = {'PRIVATE-TOKEN': token}
+headers = {'PRIVATE-TOKEN': args.token}
+
+# split '@' in the case when project name = student's email
+if args.name:
+    name = args.name
+else:
+    name = args.emails.split('@')[0]
 
 # Get students ids from their emails
-users_emails = sys.argv[5].split(',')
+users_emails = args.emails.split(',')
 user_ids = []
 for email in users_emails:
-    user_requested = requests.get(base_url + '/users', params={'search': email}, headers=headers).json()
+    user_requested = requests.get(
+        base_url + '/users', params={'search': email}, headers=headers).json()
     if len(user_requested) == 0:
         print('No user %s found, operation aborted' % email)
         exit(1)
     user_id = user_requested[0]['id']
     user_ids.append(user_id)
 
-# Create project from name, basis and group given
-params = {'name': project_name, 'import_url': import_url, 'namespace_id': group_id, 'visibility': 'private'}
-project = requests.post(base_url + '/projects', params=params, headers=headers).json()
-
+# Create project from name, import_url (if given) and group_id
+params = {'name': name, 'namespace_id': args.group_id, 'visibility': 'private'}
+if args.import_url:
+    params['import_url'] = args.import_url
+project = requests.post(base_url + '/projects',
+                        params=params, headers=headers).json()
 if 'message' in project:
     print('Error in creating project: %s' % project)
     exit(1)
-print("Project '" + project['name'] + "' at '" + project['web_url'] + "' created")
+print("Project '" + project['name'] + "' at '" +
+      project['web_url'] + "' created")
 
 # Allow users with developer access level to push and merge on master
 access_level = 30
-params = {'name': 'master', 'push_access_level': str(access_level), 'merge_access_level': str(access_level)}
-requests.post(base_url + '/projects/' + str(project['id']) + '/protected_branches', params=params, headers=headers).json()
+params = {'name': 'master', 'push_access_level': str(
+    access_level), 'merge_access_level': str(access_level)}
+requests.post(base_url + '/projects/' +
+              str(project['id']) + '/protected_branches', params=params, headers=headers).json()
 
 # Add each student as project's developer (level 30)
 for user_id in user_ids:
     params = {'user_id': user_id, 'access_level': access_level}
-    if len(sys.argv) > 6:
-        expires_at = sys.argv[6]
-        params['expires_at'] = expires_at
-    new_user = requests.post(base_url + '/projects/' + str(project['id']) + '/members', params=params, headers=headers).json()
-
+    if args.expires_at:
+        params['expires_at'] = args.expires_at
+    new_user = requests.post(base_url + '/projects/' + str(
+        project['id']) + '/members', params=params, headers=headers).json()
     if 'message' in new_user:
         print('Error in adding user: %s' % new_user)
     else:
         out = ("Adding '" + new_user['name'] + "' (" + new_user['username'] + ") in '"
-            + project['name'] + "' with access level: " + str(new_user['access_level']))
-        if len(sys.argv) > 6:
+               + project['name'] + "' with access level: " + str(new_user['access_level']))
+        if args.expires_at:
             out += ", expires at: " + new_user['expires_at']
         print(out)