diff --git a/.github/workflows/links_checker.yml b/.github/workflows/links_checker.yml
new file mode 100644
index 00000000..488deed8
--- /dev/null
+++ b/.github/workflows/links_checker.yml
@@ -0,0 +1,23 @@
+name: LinksChecker
+
+on:
+  # Triggers the workflow on push or pull request events but only for the "master" branch
+  push:
+    branches: [ "master" ]
+  pull_request:
+    branches: [ "master" ]
+
+  # Allows you to run this workflow manually from the Actions tab
+  workflow_dispatch:
+
+jobs:
+  links-checker-job:
+    runs-on: ubuntu-latest
+    steps:
+      - name: Check out repository code
+        uses: actions/checkout@v3
+
+      - name: Call the action jetbrains-academy/links-checker-action
+        uses: jetbrains-academy/links-checker-action@main
+        with:
+          dir: ./
diff --git a/.gitignore b/.gitignore
index 16099ac3..a799c5ef 100644
--- a/.gitignore
+++ b/.gitignore
@@ -135,4 +135,7 @@ dmypy.json
 !.idea/codeStyles/*
 !.idea/vcs.xml
 .idea/
-*.iml
\ No newline at end of file
+*.iml
+
+# Course files that shouldn't be committed
+/.coursecreator/
diff --git a/Classes and objects/Call a method from another method/task-remote-info.yaml b/Classes and objects/Call a method from another method/task-remote-info.yaml
index e07db09d..aed4f4a3 100644
--- a/Classes and objects/Call a method from another method/task-remote-info.yaml	
+++ b/Classes and objects/Call a method from another method/task-remote-info.yaml	
@@ -1 +1 @@
-id: 615106464
\ No newline at end of file
+id: 615106464
diff --git a/Classes and objects/Call a method from another method/task.md b/Classes and objects/Call a method from another method/task.md
index 6d7d9e18..dfba8986 100644
--- a/Classes and objects/Call a method from another method/task.md	
+++ b/Classes and objects/Call a method from another method/task.md	
@@ -2,4 +2,6 @@
 
 As we discussed before, methods may call other methods by using method attributes of the `self` argument.
 Use this knowledge to complete the `exponentiate` method of the `Calculator` class. It should
-call the `multiply` method to calculate the result.
\ No newline at end of file
+call the `multiply` method to calculate the result.
+
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6931?utm_source=jba&utm_medium=jba_courses_links).
\ No newline at end of file
diff --git a/Classes and objects/Class and Instance Variables 2/task.md b/Classes and objects/Class and Instance Variables 2/task.md
index 339ef8b2..5a03faf3 100644
--- a/Classes and objects/Class and Instance Variables 2/task.md	
+++ b/Classes and objects/Class and Instance Variables 2/task.md	
@@ -7,4 +7,6 @@ all added city names.
 
 Implement the method `add_city` that will append a city name to the `all_cities` list. Do not forget to delete the `pass` statement!
 
-In the `__init__` method, call the `add_city` method to add the city name to the list upon object initialization.
\ No newline at end of file
+In the `__init__` method, call the `add_city` method to add the city name to the list upon object initialization.
+
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6981?utm_source=jba&utm_medium=jba_courses_links).
\ No newline at end of file
diff --git a/Classes and objects/Class and Instance Variables/task.md b/Classes and objects/Class and Instance Variables/task.md
index 754b3961..9aecf490 100644
--- a/Classes and objects/Class and Instance Variables/task.md	
+++ b/Classes and objects/Class and Instance Variables/task.md	
@@ -36,6 +36,9 @@ one object, it will be changed for all objects of the class (check out the examp
 editor – see what `print(barsik.favorite_food)` will print). If you intend using a list to keep track 
 of features unique to each instance, you need to make it an instance attribute.
 
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6677?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 In the code editor, complete the implementation of the `Animals` class so that the `print` statement 
 below prints a line like this: `"This is Doggy the dog, one of my pets."` for each of the pets.
 
diff --git a/Classes and objects/Definition/task.md b/Classes and objects/Definition/task.md
index 5bfba194..afb9165d 100644
--- a/Classes and objects/Definition/task.md	
+++ b/Classes and objects/Definition/task.md	
@@ -43,7 +43,10 @@ variable `x`.
 You can find out more about class definition syntax by reading <a href="https://docs.python.org/3/tutorial/classes.html#class-definition-syntax">this section</a>
 of Python Documentation.
 
-Assign a value to  `variable` inside `MyClass` and create an object `my_class` of the class `MyClass()`. 
+For more structured and detailed information, you can also refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6661?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
+Assign a value to  `variable` inside `MyClass` and create an object `my_object` of the class `MyClass()`. 
 Run the code and see what happens!
 
 <div class='hint'>Assign any value to <code>variable</code>.</div>
diff --git a/Classes and objects/Special __init__ method/task.md b/Classes and objects/Special __init__ method/task.md
index 95a914b4..0aedd742 100644
--- a/Classes and objects/Special __init__ method/task.md	
+++ b/Classes and objects/Special __init__ method/task.md	
@@ -36,7 +36,9 @@ x.num
 (3-4.5j)
 ```
 
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6669#def-__init?utm_source=jba&utm_medium=jba_courses_links).
 
+### Task
 In the code editor, add parameters to the`__init__()` method of the `Car` class, so we can 
 create it with a specified color and brand.  
 
diff --git a/Classes and objects/The self parameter/task.md b/Classes and objects/The self parameter/task.md
index 88ac66c0..e933aadc 100644
--- a/Classes and objects/The self parameter/task.md	
+++ b/Classes and objects/The self parameter/task.md	
@@ -22,6 +22,9 @@ class Bag:
         self.add(x)
 ```
   
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6669#self?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 In the code editor, implement the `add` method of the `Calculator` class. It should 
 add `amount` to the field `current`.  In addition, complete the method `get_current`.
 Run the code to see how it works.
diff --git a/Classes and objects/Update variable/task.md b/Classes and objects/Update variable/task.md
index 029ed5be..2945c648 100644
--- a/Classes and objects/Update variable/task.md	
+++ b/Classes and objects/Update variable/task.md	
@@ -4,6 +4,8 @@ In this exercise, create a new `Car` object `car2` and then set `color`
 of `car2` to `"red"`. Print the descriptions of `car1` and `car2` by calling the 
 `description` method.
 
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6677#changing-attributes?utm_source=jba&utm_medium=jba_courses_links).
+
 <div class='hint'>Remember how we instantiated objects in the previous task by 
 "calling" the class.</div>
 <div class='hint'>Change the color using value assignment (<code>=</code>) and 
diff --git a/Classes and objects/Variable access/task.md b/Classes and objects/Variable access/task.md
index a60c25f8..c47f7407 100644
--- a/Classes and objects/Variable access/task.md	
+++ b/Classes and objects/Variable access/task.md	
@@ -17,7 +17,9 @@ then `MyClass.year` and `MyClass.say_hello` are valid attribute references retur
 integer and a function object, respectively. Class attributes can be 
 assigned to, so you can change the value of `MyClass.year` by assignment.
 
-  
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6661#class-attribute?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 Check out our example and print the value of `variable1` from `my_object`.  
 Call the `foo` method of the object `my_object`, print the result.
 
diff --git a/Classes and objects/__str__ vs __repr__/str_and_repr.py b/Classes and objects/__str__ vs __repr__/str_and_repr.py
index e322d9fb..c0a2ecc4 100644
--- a/Classes and objects/__str__ vs __repr__/str_and_repr.py	
+++ b/Classes and objects/__str__ vs __repr__/str_and_repr.py	
@@ -4,7 +4,7 @@ def __init__(self, real_part, imag_part):
         self.img = imag_part
 
     def __repr__(self):
-        return f'Complex(10, 20)'
+        return f'Complex({self.real}, {self.img})'
 
     def __str__(self):
         return f'{self.real} + i{self.img}'
diff --git a/Classes and objects/__str__ vs __repr__/task-info.yaml b/Classes and objects/__str__ vs __repr__/task-info.yaml
index 6397170b..19b7d98c 100644
--- a/Classes and objects/__str__ vs __repr__/task-info.yaml	
+++ b/Classes and objects/__str__ vs __repr__/task-info.yaml	
@@ -1,16 +1,16 @@
 type: edu
 files:
-- name: str_and_repr.py
-  visible: true
-  placeholders:
-  - offset: 438
-    length: 46
-    placeholder_text: ???
-  - offset: 524
-    length: 45
-    placeholder_text: ???
-- name: tests/__init__.py
-  visible: false
-- name: tests/test_task.py
-  visible: false
-feedback_link: https://docs.google.com/forms/d/e/1FAIpQLSfRlDlldKfuq-cHMNFfHMER61P1PRIan7KG6yp1GvaweDI7GA/viewform?usp=pp_url&entry.2103429047=Classes+and+Objects+/+str+vs+repr
\ No newline at end of file
+  - name: str_and_repr.py
+    visible: true
+    placeholders:
+      - offset: 455
+        length: 46
+        placeholder_text: ???
+      - offset: 541
+        length: 45
+        placeholder_text: ???
+  - name: tests/__init__.py
+    visible: false
+  - name: tests/test_task.py
+    visible: false
+feedback_link: https://docs.google.com/forms/d/e/1FAIpQLSfRlDlldKfuq-cHMNFfHMER61P1PRIan7KG6yp1GvaweDI7GA/viewform?usp=pp_url&entry.2103429047=Classes+and+Objects+/+str+vs+repr
diff --git a/Classes and objects/__str__ vs __repr__/task.md b/Classes and objects/__str__ vs __repr__/task.md
index ea3b25dc..5eb5b0e1 100644
--- a/Classes and objects/__str__ vs __repr__/task.md	
+++ b/Classes and objects/__str__ vs __repr__/task.md	
@@ -27,6 +27,9 @@ Also, if we think it would be useful to have a string representation for users,
 a `__str__` function. Check out another implementation of the class `Complex` in the code editor. Run the code
 to see what each of the two `print` statements prints.
 
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/7139#str__-vs-__repr?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 Implement `__str__` and `__repr__` methods for the class `Cat`. `__str__` method should return a string like this:
 `"My siamese cat's name is Lucy"`;  `__repr__` method should return a string like this:
 `"Cat, breed: siamese, name: Lucy"`. Use [f-strings](course://Strings/F-strings).
diff --git a/Condition expressions/Boolean operators order/task.md b/Condition expressions/Boolean operators order/task.md
index 9198cfe7..212fbf5e 100644
--- a/Condition expressions/Boolean operators order/task.md	
+++ b/Condition expressions/Boolean operators order/task.md	
@@ -3,6 +3,9 @@
 Boolean operators are not evaluated from left to right. There's an order of operations for 
 boolean operators: `not` is evaluated first, `and` is evaluated next, and `or` is evaluated last.  
 
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6025?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 Write an expression that evaluates to `True` if `name` is either `"John"` or `"Jane"` who are `16` or older, but younger than `25`.
 
 <div class='hint'>Combine the <code>and</code> and <code>or</code> keywords.</div>
diff --git a/Condition expressions/Boolean operators/task.md b/Condition expressions/Boolean operators/task.md
index 354ae53d..be36fe30 100644
--- a/Condition expressions/Boolean operators/task.md	
+++ b/Condition expressions/Boolean operators/task.md	
@@ -5,6 +5,9 @@ operator `and` returns `True` when the expressions on both sides of `and` are `T
 The boolean operator `or` returns `True` when at least one expression on either side 
 of `or` is `True`. The boolean operator `not` inverts the boolean expression it precedes.  
   
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6025?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 Write an expression that evaluates to `True` if `name` is equal to `"John"` and
 he is `16` or older.  
 
diff --git a/Condition expressions/Else and elif parts in if statement/task.md b/Condition expressions/Else and elif parts in if statement/task.md
index 7d2de9ca..7b4f01dd 100644
--- a/Condition expressions/Else and elif parts in if statement/task.md	
+++ b/Condition expressions/Else and elif parts in if statement/task.md	
@@ -41,6 +41,9 @@ a += 1 if a > b else a -= 1
 ```
 </details>
   
+For more structured and detailed information, you can refer to [this](https://hyperskill.org/learn/step/5932?utm_source=jba&utm_medium=jba_courses_links) and [this](https://hyperskill.org/learn/step/5926?utm_source=jba&utm_medium=jba_courses_links) Hyperskill knowledge base pages.
+
+### Task
 Print `True` if `name` is equal to `"John"` and `False` otherwise.  
 
 <div class='hint'>Use the <code>if</code> keyword and the <code>==</code> operator.</div>
diff --git a/Condition expressions/If statement/task.md b/Condition expressions/If statement/task.md
index d9a8a538..c36da245 100644
--- a/Condition expressions/If statement/task.md	
+++ b/Condition expressions/If statement/task.md	
@@ -26,6 +26,9 @@ If you have only one statement to execute, you can put it on the same line as th
 if a > b: print("a is greater than b")
 ```
 
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/5953?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 Print `"Not an empty list!"` if the `tasks` list is not empty.  
 After the list is cleared, check again (you might need a different condition!) and print `'Now empty!'` if it is.
 
diff --git a/Condition expressions/Single-line if-else statement/task.md b/Condition expressions/Single-line if-else statement/task.md
index bbaba05b..f010ac6b 100644
--- a/Condition expressions/Single-line if-else statement/task.md	
+++ b/Condition expressions/Single-line if-else statement/task.md	
@@ -1,4 +1,9 @@
-## Single-line if-else statement
+As you saw in the previous tasks, a simple `if-else` statement can in fact be written as a single line.
 
-As you saw in the previous tasks, a simple `if-else` statement can in fact be written as a single line. Rewrite the statement in the code editor so that it
-fits in one line but the results of its execution remain exactly the same.
\ No newline at end of file
+### Task
+Rewrite the statement in the code editor so that it
+fits in one line but the results of its execution remain exactly the same:
+- If `my_random_number` is greater than 50, the program should print the value of `my_random_number`.
+- Otherwise, it should print the message `"Too small!"`.
+
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/5932#simple-if-else?utm_source=jba&utm_medium=jba_courses_links).
\ No newline at end of file
diff --git a/Data structures/Dictionaries/task.md b/Data structures/Dictionaries/task.md
index f8531122..5b1c77cd 100644
--- a/Data structures/Dictionaries/task.md	
+++ b/Data structures/Dictionaries/task.md	
@@ -25,6 +25,9 @@ You can access a value in a dictionary similarly to how you would access a value
 but using a key instead of an index. More info about this data structure can be found 
 <a href="https://docs.python.org/3/tutorial/datastructures.html#dictionaries">here</a>.
 
+For more structured and detailed information, you can also refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6481?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 Add Jared's (`"Jared"`) number `570` to the phone book.
 Remove Gerard's number from the phone book.
 Print Jane's phone number from the `phone_book`.  
diff --git a/Data structures/Dictionary keys() and values()/task.md b/Data structures/Dictionary keys() and values()/task.md
index 9000bcf3..5a8b81cb 100644
--- a/Data structures/Dictionary keys() and values()/task.md	
+++ b/Data structures/Dictionary keys() and values()/task.md	
@@ -14,6 +14,9 @@ followed by a dot.
 
 Read more about the operations that dictionaries support <a href="https://docs.python.org/3/library/stdtypes.html#typesmapping">here</a>.
 
+For more structured and detailed information, you can also refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/11096?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 Print all values from the `phone_book` .  
 
 <div class='hint'>Use the method <code>values()</code>.</div>
diff --git a/Data structures/Dictionary keys/task.md b/Data structures/Dictionary keys/task.md
index 454d07b7..62b7e92e 100644
--- a/Data structures/Dictionary keys/task.md	
+++ b/Data structures/Dictionary keys/task.md	
@@ -2,6 +2,6 @@
 
 Try to figure out what's wrong with this dictionary and fix it.
 
-<div class="hint">Remember that dictionary keys can only be immutable types? You could replace the list with several individual key:value pairs with 
-keys of type <code>str</code> or with a tuple.</div>
-<div class="hint">Remember that keys need to be unique? You could rename one of the 'Bob' keys.</div>
\ No newline at end of file
+When fixing, be aware of the following requirements
+- Since dictionary keys can only be of immutable types, replace the list with several individual `key:value` pairs with keys of type `str` or with a tuple.
+- Since keys need to be unique, rename one of the `Bob` keys to a name of your choice.
\ No newline at end of file
diff --git a/Data structures/In keyword/task.md b/Data structures/In keyword/task.md
index 4e99fc6a..0caaa35d 100644
--- a/Data structures/In keyword/task.md	
+++ b/Data structures/In keyword/task.md	
@@ -8,6 +8,8 @@ item. You can apply `in` to lists or dictionaries the same way you did it with s
 
 Please complete the task in the specified order.
 
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/11096?utm_source=jba&utm_medium=jba_courses_links).
+
 <div class="hint">Use the <code>in</code> keyword.</div>
 
 <div class="hint">Use the <code>.values()</code> and <code>.keys()</code> attributes.</div>
diff --git a/Data structures/Join method/task.md b/Data structures/Join method/task.md
index 688d9858..ba4fea89 100644
--- a/Data structures/Join method/task.md	
+++ b/Data structures/Join method/task.md	
@@ -33,6 +33,9 @@ aa = bb = cc
 Python is a programming language
 ```
 
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6972#join-a-list?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 Assign a value to the  `joined` variable such that the `print` statement prints the following:
 ```text
 I like apples and I like bananas and I like peaches and I like grapes
diff --git a/Data structures/List items/task.md b/Data structures/List items/task.md
index 2bbf2b12..74395ee3 100644
--- a/Data structures/List items/task.md	
+++ b/Data structures/List items/task.md	
@@ -7,6 +7,10 @@ This way you can even change the size of a list or clear it entirely by doing so
 animals[:] = []
 ```
   
+### Task
 Make all `animals` elephants by replacing the last two items.  
+We suggest that you first run the program in the IDE without making any changes. This will allow you to see what the `animals` list looks like after all the operations have been performed.
 
 <div class='hint'>Use assignment to a slice as in examples.</div>
+
+<div class='hint'>You can assign a list consisting of several elements.</div>
diff --git a/Data structures/Lists introduction/task.md b/Data structures/Lists introduction/task.md
index f1270585..464114cb 100644
--- a/Data structures/Lists introduction/task.md	
+++ b/Data structures/Lists introduction/task.md	
@@ -17,6 +17,9 @@ squares + [36, 49, 64, 81, 100]
 
 You can explore lists in more detail by reading <a href="https://docs.python.org/3.9/tutorial/introduction.html#lists">this page</a>.
 
+For more structured and detailed information, you can also refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/5979?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 Use list slicing to print `[4, 9, 16]`.  
 
 <div class='hint'>List slicing syntax looks just like that for strings: <code>lst[index1:index2]</code>.
diff --git a/Data structures/Lists operations/task.md b/Data structures/Lists operations/task.md
index c379e760..d43e8eed 100644
--- a/Data structures/Lists operations/task.md	
+++ b/Data structures/Lists operations/task.md	
@@ -32,5 +32,8 @@ squares
   
 Find out about many other useful list methods on <a href="https://docs.python.org/3/tutorial/datastructures.html#more-on-lists">this page</a>.
 
+For more structured and detailed information, you can also refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6031?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 Replace `"dino"` with `"dinosaur"` in the `animals` list.  
 <div class='hint'>Use list indexing operation and value assignment.</div>
diff --git a/Data structures/Nested Lists/task.md b/Data structures/Nested Lists/task.md
index 39d99088..f5f240fa 100644
--- a/Data structures/Nested Lists/task.md	
+++ b/Data structures/Nested Lists/task.md	
@@ -31,6 +31,9 @@ Output:
 ```text
 1
 ```
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6938?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 In the code editor, use indexing to access and print elements `9` and `10` from of the nested list `my_list`. 
 
 <div class="hint">If you're stuck, review the examples in the task description again.</div>
\ No newline at end of file
diff --git a/Data structures/Tuples/task.md b/Data structures/Tuples/task.md
index 7c39dd92..25f4e0a0 100644
--- a/Data structures/Tuples/task.md	
+++ b/Data structures/Tuples/task.md	
@@ -40,7 +40,10 @@ values `12345`, `54321`, and `hello!` are packed together in a tuple.
 
 Some other list methods are also 
 applicable to tuples. You can read more about tuples <a href="https://docs.python.org/3/tutorial/datastructures.html#tuples-and-sequences">here</a>.
+
+For more structured and detailed information, you can also refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/7462?utm_source=jba&utm_medium=jba_courses_links).
   
+### Task
 Print the length of the tuple `alphabet`. Then create a tuple with a single element `'fun_tuple'`. 
 You can run the code to see what it prints.  
 
diff --git a/File input output/Open file/input1.txt b/File input output/Open file/input1.txt
index 75d5cb77..e658b8cf 100644
--- a/File input output/Open file/input1.txt	
+++ b/File input output/Open file/input1.txt	
@@ -1 +1 @@
-This is the entire file.
+outfile.txt
\ No newline at end of file
diff --git a/File input output/Open file/open_file.py b/File input output/Open file/open_file.py
index 29aaf232..301ab0e1 100644
--- a/File input output/Open file/open_file.py	
+++ b/File input output/Open file/open_file.py	
@@ -4,9 +4,9 @@
 
 
 with open('input1.txt', 'r') as file:
-    print(file.read())
+    outfile_name = file.readline()
 
 
-outfile = open('outfile.txt', 'w')  # Opening the file in write mode (using `w` argument)
+outfile = open(outfile_name, 'w')  # Opening the file in write mode (using the `w` argument)
 outfile.write('Hello World')  # Writing to the file, the write() method is explained later.
 outfile.close()
diff --git a/File input output/Open file/task-info.yaml b/File input output/Open file/task-info.yaml
index 703b320f..a9b7e0ac 100644
--- a/File input output/Open file/task-info.yaml	
+++ b/File input output/Open file/task-info.yaml	
@@ -1,20 +1,23 @@
 type: edu
 files:
-- name: open_file.py
-  visible: true
-  placeholders:
-  - offset: 152
-    length: 37
-    placeholder_text: '# Open the file input1.txt in read mode using the with statement'
-  - offset: 397
-    length: 15
-    placeholder_text: '# Close the output file!'
-- name: input.txt
-  visible: true
-- name: input1.txt
-  visible: true
-- name: tests/__init__.py
-  visible: false
-- name: tests/test_task.py
-  visible: false
-feedback_link: https://docs.google.com/forms/d/e/1FAIpQLSfRlDlldKfuq-cHMNFfHMER61P1PRIan7KG6yp1GvaweDI7GA/viewform?usp=pp_url&entry.2103429047=File+Input+Output+/+Open+file
\ No newline at end of file
+  - name: open_file.py
+    visible: true
+    placeholders:
+      - offset: 152
+        length: 37
+        placeholder_text: '# Open the file input1.txt in read mode using the with statement'
+      - offset: 242
+        length: 12
+        placeholder_text: ???
+      - offset: 412
+        length: 15
+        placeholder_text: '# Close the output file!'
+  - name: input.txt
+    visible: true
+  - name: input1.txt
+    visible: true
+  - name: tests/__init__.py
+    visible: false
+  - name: tests/test_task.py
+    visible: false
+feedback_link: https://docs.google.com/forms/d/e/1FAIpQLSfRlDlldKfuq-cHMNFfHMER61P1PRIan7KG6yp1GvaweDI7GA/viewform?usp=pp_url&entry.2103429047=File+Input+Output+/+Open+file
diff --git a/File input output/Open file/task.md b/File input output/Open file/task.md
index 79c7d390..217e70c3 100644
--- a/File input output/Open file/task.md	
+++ b/File input output/Open file/task.md	
@@ -28,8 +28,12 @@ True
 **Important**: If you’re not using the `with` keyword, then you should call `f.close()` to close the file and 
 free up any system resources used by it. You cannot use the file object after it is closed, whether by a `with` statement or by calling `f.close()`.
 
-In the code editor, open the file `input1.txt` in read mode properly using the `with` statement. Check out the
-name that is used for the file on the next line and use it. Afterwards, close the output file `outfile` that was opened. 
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/8691?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
+- In the code editor, open the file `input1.txt` in read mode, properly using the `with` statement. The `input1.txt` file stores the name of the file where the string `Hello World` should be output. Reading this name is already implemented in the `outfile_name` variable.
+- Open the file with the `outfile_name` name in write mode.
+- Afterward, close the output file that was opened.
 
 After running your code, check out the output file that appeared in the course view among the other files.
 
diff --git a/File input output/Open file/tests/test_task.py b/File input output/Open file/tests/test_task.py
index d4728d45..38539719 100644
--- a/File input output/Open file/tests/test_task.py	
+++ b/File input output/Open file/tests/test_task.py	
@@ -11,9 +11,12 @@ def test_out(self):
                 from open_file import outfile
             output = f.getvalue().split('\n')
 
-            expected, actual = 8, len(output)
+            expected, actual = 6, len(output)
             self.assertEqual(expected, actual, msg='Please do not remove or add any print statements.')
             self.assertTrue(outfile.closed, msg='The outfile file is not closed.')
+            with open('outfile.txt', 'r') as file:
+                hello = file.readline()
+                self.assertEqual('Hello World', hello, msg='Please do not remove the instruction to write "Hello World"')
 
         except ImportError:
             self.assertTrue(False, msg='Please do not rename any variables.')
@@ -21,3 +24,5 @@ def test_out(self):
         except NameError:
             self.assertTrue(False, msg='You should open input1.txt as a file.')
 
+        except FileNotFoundError:
+            self.assertTrue(False, msg='The output file name should be derived from the outfile_name variable.')
diff --git a/File input output/Read all lines/task.md b/File input output/Read all lines/task.md
index 8b30dcb8..f055224d 100644
--- a/File input output/Read all lines/task.md	
+++ b/File input output/Read all lines/task.md	
@@ -3,4 +3,6 @@
 ### Task
 Read all lines from the file input.txt into the list called `lines_list`. There are at least two different ways to do it.
 
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/8139#readlines?utm_source=jba&utm_medium=jba_courses_links).
+
 <div class="hint">Two possible solutions are discussed in the previous task.</div>
\ No newline at end of file
diff --git a/File input output/Read file/task.md b/File input output/Read file/task.md
index 4df344e0..10eea7e3 100644
--- a/File input output/Read file/task.md	
+++ b/File input output/Read file/task.md	
@@ -50,10 +50,11 @@ Second line of the file
 
 If you want to read all the lines of a file in a list, you can also use `list(f)` or `f.readlines()`.
 
-
 For more details, check out the section [Methods of File Objects](https://docs.python.org/3/tutorial/inputoutput.html#methods-of-file-objects) in Python Tutorial.
 
+For more structured and detailed information, you can also refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/8139?utm_source=jba&utm_medium=jba_courses_links).
 
+### Task
 Print the contents of "input.txt" to output by iterating over the lines of the file and printing each one.
 Then print only the first line of "input1.txt".
 
diff --git a/File input output/What next/task.md b/File input output/What next/task.md
index e8bd290c..d41a6912 100644
--- a/File input output/What next/task.md	
+++ b/File input output/What next/task.md	
@@ -1,14 +1,28 @@
 Congratulations, you made it to the end of the course! We hope you enjoyed it.
 
+### Feedback 
+We would really appreciate it if you could take a few minutes to answer [our survey](https://surveys.jetbrains.com/s3/course-feedback-python-intro). Your feedback will help us improve this course and make it relevant for future students.
+
 If you would like to leave general feedback – write us a review on the course’s Marketplace [page](https://plugins.jetbrains.com/plugin/16630-introduction-to-python/reviews).
-If you want to contribute, feel free to create a pull request or an issue in the course’s [GitHub repo](https://github.com/jetbrains-academy/introduction_to_python).
 
 ### What next?
-
 Now that you’ve explored the basics of Python programming, you can dive deeper and polish your new skills! Here are some options for you:
 - Learn about the most widely used Python library with our [course on NumPy](https://plugins.jetbrains.com/plugin/18302-python-libraries--numpy).
 - Find out how to build an [AMazing](https://plugins.jetbrains.com/plugin/17519-amazing) maze with Python.
 - Discover the basics of [Machine Learning](https://plugins.jetbrains.com/plugin/18392-machine-learning-101).
 - Check out the projects in the [Python Core](https://hyperskill.org/tracks/2) or [Python for Beginners](https://hyperskill.org/tracks/6) track at JetBrains Academy on Hyperskill.
 
+You can also find a huge number of other courses in the [JetBrains Academy catalog](https://academy.jetbrains.com/)!
+
 Stay tuned for new courses and updates!
+
+### Several reasons to try JetBrains Academy now
+- At the moment, 37 Python projects and 348 topics are available for learning, and the number keeps growing.
+  Other programming languages, such as Kotlin and Java, are also available.
+- Projects of varying difficulty levels provide a flexible learning experience for all.
+- Comprehensive learning tracks are augmented with a detailed [Knowledge Map](https://hyperskill.org/knowledge-map?utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=last-task).
+- Learn anywhere: you can start learning on your tablet or mobile phone via a browser and continue on your 
+  laptop or PC; you can even build the projects [right in your IDE](https://hyperskill.org/plugin#python?utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=last-task).
+
+### Contribution
+If you want to contribute, feel free to create a pull request or an issue in the course’s [GitHub repo](https://github.com/jetbrains-academy/introduction_to_python).
diff --git a/File input output/Write to file/task-info.yaml b/File input output/Write to file/task-info.yaml
index ef0c1537..e3f688ff 100644
--- a/File input output/Write to file/task-info.yaml	
+++ b/File input output/Write to file/task-info.yaml	
@@ -7,14 +7,13 @@ files:
   placeholders:
   - offset: 74
     length: 3
-    placeholder_text: add modifier
+    placeholder_text: modifier
   - offset: 89
     length: 33
-    placeholder_text: "# On a new line in  \"output.txt\", add all elements from the\
-      \ zoo list, joined by \" and \""
+    placeholder_text: "# Write a new line symbol into a file, along with all elements from the zoo list, joined by \" and \""
   - offset: 127
     length: 27
-    placeholder_text: '# Add the number to the output as well'
+    placeholder_text: '# Write a new line symbol and the value of the number variable into a file'
 - name: tests/__init__.py
   visible: false
 - name: tests/test_task.py
diff --git a/File input output/Write to file/task.md b/File input output/Write to file/task.md
index b4017a49..7ccded26 100644
--- a/File input output/Write to file/task.md	
+++ b/File input output/Write to file/task.md	
@@ -36,6 +36,9 @@ f.write('\n' + 'string,' + ' ' + 'another string')
 ```
 This will add a new line and write `'string, another string'`.
 
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/8334?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 In the code editor, **append** one new line to `output.txt` with all elements from the `zoo` list separated by `' and '`. 
 Use the <code>' and '.join(lst)</code> syntax to join the list elements into the required string. Afterwards, 
 append another line with the `number` to the same output file.
@@ -43,21 +46,4 @@ append another line with the `number` to the same output file.
 <div class='hint'>Use the <code>'a'</code> modifier to append lines at the end of the file.</div>
 <div class='hint'>Use the <code>write()</code> method.</div>
 <div class='hint'>Convert <code>number</code> into a string before writing.</div>
-<div class="hint">Add <code>\n</code> at the beginning of each string to write so that it eds up a separate line.</div>
-
-
-
-## What's next?
-
-Now, once you have mastered the basics of Python, we bet that you’re wondering what to do next. 
-We recommend checking out [JetBrains Academy](https://hi.hyperskill.org?utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=last-task). 
-Here are several reasons to try JetBrains Academy now:
-
-- At the moment, 37 Python projects and 348 topics are available for learning, and the number keeps growing.
-  Other programming languages, such as Kotlin and Java, are also available.
-- Projects of varying difficulty levels provide a flexible learning experience for all.
-- Comprehensive learning tracks are augmented with a detailed [Knowledge Map](https://hyperskill.org/knowledge-map?utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=last-task).
-- Learn anywhere: you can start learning on your tablet or mobile phone via a browser and continue on your 
-  laptop or PC; you can even build the projects [right in your IDE](https://hyperskill.org/plugin#python?utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=last-task).
-
-Join JetBrains Academy [here](https://hyperskill.org/onboarding?track=python&utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=last-task) and try it yourself!
+<div class="hint">Add <code>\n</code> at the beginning of each string to write, so that it ends up on a separate line.</div>
diff --git a/Functions/Args and kwargs/task.md b/Functions/Args and kwargs/task.md
index 4ea180c4..a3c64bf2 100644
--- a/Functions/Args and kwargs/task.md	
+++ b/Functions/Args and kwargs/task.md	
@@ -24,7 +24,7 @@ after the `*args` parameter are [‘keyword-only’](https://peps.python.org/pep
 rather than positional arguments. Another way to call this function is shown in call 2, and it will give 
 us the same output.
 
-For more structured and detailed information, you can refer to [this ](https://hyperskill.org/learn/step/8560) and [this](https://hyperskill.org/learn/step/9544) Hyperskill knowledge base pages.
+For more structured and detailed information, you can refer to [this ](https://hyperskill.org/learn/step/8560?utm_source=jba&utm_medium=jba_courses_links) and [this](https://hyperskill.org/learn/step/9544?utm_source=jba&utm_medium=jba_courses_links) Hyperskill knowledge base pages.
 
 ### Task
 
diff --git a/Functions/Default parameters/task.md b/Functions/Default parameters/task.md
index 772cdd68..fbc1a8ae 100644
--- a/Functions/Default parameters/task.md	
+++ b/Functions/Default parameters/task.md	
@@ -19,7 +19,7 @@ Do not put spaces around the `=` symbol in function calls and definitions.
 Explore this topic further by reading <a href="https://docs.python.org/3/tutorial/controlflow.html#default-argument-values">this section</a>
 of Python Documentation.
 
-For more structured and detailed information, you can also refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/10295).
+For more structured and detailed information, you can also refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/10295?utm_source=jba&utm_medium=jba_courses_links).
 
 ### Task
 Add parameters to the `hello()` function and set a default value for the `name` parameter.  
diff --git a/Functions/Definition/task.md b/Functions/Definition/task.md
index eea68d8d..2be63e20 100644
--- a/Functions/Definition/task.md
+++ b/Functions/Definition/task.md
@@ -21,7 +21,7 @@ my_function()  # function call
 
 Read more about defining functions in <a href="https://docs.python.org/3/tutorial/controlflow.html#defining-functions">this section</a> of Python Documentation.
 
-For more structured and detailed information, you can also refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/5900).
+For more structured and detailed information, you can also refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/5900?utm_source=jba&utm_medium=jba_courses_links).
 
 ### Task
  - Call the function `my_function` inside the loop to repeat its invocation 5 times
diff --git a/Functions/Docstrings/task.md b/Functions/Docstrings/task.md
index 746f9268..488e852c 100644
--- a/Functions/Docstrings/task.md
+++ b/Functions/Docstrings/task.md
@@ -6,7 +6,7 @@ A docstring for a function or method should summarize its behavior and document
 
 Docstrings should also generally be written for module, class and method definitions (you will learn about these things later on in the course). Read more about docstring conventions in the [Python PEP Guide](https://peps.python.org/pep-0257/).
 
-For more structured and detailed information, you can also refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/11869).
+For more structured and detailed information, you can also refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/11869?utm_source=jba&utm_medium=jba_courses_links).
 
 ### Task 
 Add the following docstring to the function defined in the code editor:
diff --git a/Functions/Parameters and call arguments/task.md b/Functions/Parameters and call arguments/task.md
index 03cdab29..4f307708 100644
--- a/Functions/Parameters and call arguments/task.md	
+++ b/Functions/Parameters and call arguments/task.md	
@@ -35,7 +35,7 @@ TypeError                                 Traceback (most recent call last)
 
 TypeError: my_function() missing 1 required positional argument: 'surname'
 ```
-For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/7248).
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/7248?utm_source=jba&utm_medium=jba_courses_links).
 
 ### Task
 In the code editor, define a function that prints the square of a passed parameter.  
diff --git a/Functions/Recursion/task.md b/Functions/Recursion/task.md
index 835b84c7..bd0e9d17 100644
--- a/Functions/Recursion/task.md
+++ b/Functions/Recursion/task.md
@@ -54,7 +54,7 @@ Keep in mind that recursion isn’t useful in every situation. For some problems
 possible, will be awkward rather than elegant. Recursive implementations often consume more 
 memory than non-recursive ones and in some cases may result in slower execution.
 
-For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/7665).
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/7665?utm_source=jba&utm_medium=jba_courses_links).
 
 ### Task
 In the code editor, implement a recursive function that calculates the [factorial](https://en.wikipedia.org/wiki/Factorial) of a positive integer.
diff --git a/Functions/Return value/task.md b/Functions/Return value/task.md
index e7a2ae93..8c5911ef 100644
--- a/Functions/Return value/task.md	
+++ b/Functions/Return value/task.md	
@@ -6,7 +6,7 @@ without a `return` statement do return a value. This value is
 called `None` (it’s a built-in name). Writing the value `None` is normally suppressed by 
 the interpreter, but if you really want to see it, you can use `print(some_func())`.
 
-For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/5900#execution-and-return).
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/5900#execution-and-return?utm_source=jba&utm_medium=jba_courses_links).
 
 ><i>The first statement of the function body can optionally be a string literal; this string 
 literal is the function’s documentation string, or docstring (more about docstrings can 
diff --git a/Introduction/About/task.md b/Introduction/About/task.md
index 9b4bf829..77e00c39 100644
--- a/Introduction/About/task.md
+++ b/Introduction/About/task.md
@@ -2,6 +2,8 @@
 
 Welcome to the course in basics of Python programming!
 
+Please join the course chat on Discord using the [link](https://discord.gg/aU6qvN5weS). There, you can ask questions, interact with instructors, and connect with your fellow students.
+
 #### Why Learn Python?
 Python is one of the most popular programming languages in the world.
 Used extensively in data science, ML, and AI, Python is the fastest growing major programming language.
diff --git a/Introduction/Comments/comments.py b/Introduction/Comments/comments.py
index fcc44d8c..a19c7ece 100644
--- a/Introduction/Comments/comments.py
+++ b/Introduction/Comments/comments.py
@@ -3,5 +3,7 @@
 
 print("# this is not a comment")
 
+# print(“This commented line will never be executed”)
+
 # The following line should be commented:
 # print("This line should not be printed!")
diff --git a/Introduction/Comments/task-info.yaml b/Introduction/Comments/task-info.yaml
index 8fd63bbe..1ed115d3 100644
--- a/Introduction/Comments/task-info.yaml
+++ b/Introduction/Comments/task-info.yaml
@@ -1,11 +1,11 @@
 type: edu
 files:
-- name: comments.py
-  visible: true
-  placeholders:
-  - offset: 181
-    length: 43
-    placeholder_text: print("This line should not be printed!")
-- name: tests/test_task.py
-  visible: false
-feedback_link: https://docs.google.com/forms/d/e/1FAIpQLSfRlDlldKfuq-cHMNFfHMER61P1PRIan7KG6yp1GvaweDI7GA/viewform?usp=pp_url&entry.2103429047=Introduction+/+Comments
\ No newline at end of file
+  - name: comments.py
+    visible: true
+    placeholders:
+      - offset: 236
+        length: 43
+        placeholder_text: print("This line should not be printed!")
+  - name: tests/test_task.py
+    visible: false
+feedback_link: https://docs.google.com/forms/d/e/1FAIpQLSfRlDlldKfuq-cHMNFfHMER61P1PRIan7KG6yp1GvaweDI7GA/viewform?usp=pp_url&entry.2103429047=Introduction+/+Comments
diff --git a/Introduction/Comments/task.md b/Introduction/Comments/task.md
index 93ca764b..99cb6671 100644
--- a/Introduction/Comments/task.md
+++ b/Introduction/Comments/task.md
@@ -30,6 +30,8 @@ You can read more about proper commenting in <a href="https://www.python.org/dev
   
 You can also comment a line or a block of code if you don't want to delete it, but it's not needed at the moment. 
 
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6081?utm_source=jba&utm_medium=jba_courses_links).
+
 ### Task
 In the code editor, comment the line with the `print` statement that says it should not be printed. 
 See how the code is not highlighted anymore.
diff --git a/Introduction/Getting to know you/main.py b/Introduction/Getting to know you/main.py
new file mode 100644
index 00000000..0a9300dc
--- /dev/null
+++ b/Introduction/Getting to know you/main.py	
@@ -0,0 +1,3 @@
+if __name__ == "__main__":
+    # Write your solution here
+    pass
diff --git a/Introduction/Getting to know you/task-info.yaml b/Introduction/Getting to know you/task-info.yaml
new file mode 100644
index 00000000..2d9fd356
--- /dev/null
+++ b/Introduction/Getting to know you/task-info.yaml	
@@ -0,0 +1,4 @@
+type: theory
+files:
+  - name: main.py
+    visible: true
diff --git a/Introduction/Getting to know you/task-remote-info.yaml b/Introduction/Getting to know you/task-remote-info.yaml
new file mode 100644
index 00000000..836cb041
--- /dev/null
+++ b/Introduction/Getting to know you/task-remote-info.yaml	
@@ -0,0 +1 @@
+id: 417821566
diff --git a/Introduction/Getting to know you/task.md b/Introduction/Getting to know you/task.md
new file mode 100644
index 00000000..5c8bf04d
--- /dev/null
+++ b/Introduction/Getting to know you/task.md	
@@ -0,0 +1,3 @@
+## Getting to know you
+Thank you for taking our Introduction to Python course!  
+We would be happy to get to know you a bit better, so we’re asking you to fill out [this brief form](https://surveys.jetbrains.com/s3/course-introduction-python-intro).
\ No newline at end of file
diff --git a/Introduction/Task Description/images/edu_task_description_window_settings.png b/Introduction/Task Description/images/edu_task_description_window_settings.png
index 76931355..063f889a 100644
Binary files a/Introduction/Task Description/images/edu_task_description_window_settings.png and b/Introduction/Task Description/images/edu_task_description_window_settings.png differ
diff --git a/Introduction/Task Description/images/edu_task_description_window_settings_dark.png b/Introduction/Task Description/images/edu_task_description_window_settings_dark.png
index ee76bb50..750749fd 100644
Binary files a/Introduction/Task Description/images/edu_task_description_window_settings_dark.png and b/Introduction/Task Description/images/edu_task_description_window_settings_dark.png differ
diff --git a/Introduction/Task Description/images/moreVertical.svg b/Introduction/Task Description/images/moreVertical.svg
new file mode 100644
index 00000000..fdb8c426
--- /dev/null
+++ b/Introduction/Task Description/images/moreVertical.svg	
@@ -0,0 +1,6 @@
+<!-- Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> 
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> 
+ <circle cx="8" cy="3" r="1" fill="#6C707E" /> 
+ <circle cx="8" cy="8" r="1" fill="#6C707E" /> 
+ <circle cx="8" cy="13" r="1" fill="#6C707E" /> 
+</svg>
\ No newline at end of file
diff --git a/Introduction/Task Description/images/moreVertical_dark.svg b/Introduction/Task Description/images/moreVertical_dark.svg
new file mode 100644
index 00000000..0844ebaf
--- /dev/null
+++ b/Introduction/Task Description/images/moreVertical_dark.svg	
@@ -0,0 +1,6 @@
+<!-- Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> 
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> 
+ <circle cx="8" cy="3" r="1" fill="#CED0D6" /> 
+ <circle cx="8" cy="8" r="1" fill="#CED0D6" /> 
+ <circle cx="8" cy="13" r="1" fill="#CED0D6" /> 
+</svg>
\ No newline at end of file
diff --git a/Introduction/Task Description/task-info.yaml b/Introduction/Task Description/task-info.yaml
index ad145b35..1972a171 100644
--- a/Introduction/Task Description/task-info.yaml	
+++ b/Introduction/Task Description/task-info.yaml	
@@ -1,25 +1,29 @@
 type: theory
 files:
-- name: main.py
-  visible: true
-- name: images/back.svg
-  visible: false
-- name: images/commentTask.svg
-  visible: false
-- name: images/edu_next_button.png
-  visible: false
-- name: images/edu_peek_solution.png
-  visible: false
-- name: images/reset.svg
-  visible: false
-- name: images/forward.svg
-  visible: false
-- name: images/gear.svg
-  visible: false
-- name: images/hideToolWindow.svg
-  visible: false
-- name: images/edu_task_description_window_settings_dark.png
-  visible: false
-- name: images/edu_task_description_window_settings.png
-  visible: false
+  - name: main.py
+    visible: true
+  - name: images/back.svg
+    visible: false
+  - name: images/commentTask.svg
+    visible: false
+  - name: images/edu_next_button.png
+    visible: false
+  - name: images/edu_peek_solution.png
+    visible: false
+  - name: images/reset.svg
+    visible: false
+  - name: images/forward.svg
+    visible: false
+  - name: images/gear.svg
+    visible: false
+  - name: images/hideToolWindow.svg
+    visible: false
+  - name: images/edu_task_description_window_settings_dark.png
+    visible: false
+  - name: images/edu_task_description_window_settings.png
+    visible: false
+  - name: images/moreVertical.svg
+    visible: false
+  - name: images/moreVertical_dark.svg
+    visible: false
 feedback_link: https://docs.google.com/forms/d/e/1FAIpQLSfRlDlldKfuq-cHMNFfHMER61P1PRIan7KG6yp1GvaweDI7GA/viewform?usp=pp_url&entry.2103429047=Introduction+/+Task+Description
diff --git a/Introduction/Task Description/task.md b/Introduction/Task Description/task.md
index aace8e28..88491775 100644
--- a/Introduction/Task Description/task.md	
+++ b/Introduction/Task Description/task.md	
@@ -20,10 +20,10 @@ Use Task Description icons for the following actions:
 
 We recommend keeping the Task Description window visible and not hiding it completely. If it is too distracting, you can hide it by clicking the ![](images/hideToolWindow.svg) button in the top right-hand corner of the Task Description window.
 
-If you use two monitors, it may be helpful to switch the Task Description panel to the floating mode and move it to the second monitor, or just place it near the main IDE window. To do this, click the tool window settings ![](images/gear.svg) icon :
+If you use two monitors, it may be helpful to switch the Task Description panel to the floating mode and move it to the second monitor, or just place it near the main IDE window. To do this, click the tool window settings ![](images/gear.svg) / ![](images/moreVertical.svg) icon :
 
 
-<img src="images/edu_task_description_window_settings_dark.png" class="center" width=600>
+<img src="images/edu_task_description_window_settings.png" class="center" width=600>
 
 <style>
 img {
diff --git a/Introduction/lesson-info.yaml b/Introduction/lesson-info.yaml
index 1dc02bdf..044e7552 100644
--- a/Introduction/lesson-info.yaml
+++ b/Introduction/lesson-info.yaml
@@ -1,8 +1,9 @@
 content:
-- About
-- Navigating Around
-- Course View
-- Editor
-- Task Description
-- Our first program
-- Comments
+  - About
+  - Navigating Around
+  - Course View
+  - Editor
+  - Task Description
+  - Getting to know you
+  - Our first program
+  - Comments
diff --git a/Loops/Break keyword/task.md b/Loops/Break keyword/task.md
index 3e644312..c4bc8892 100644
--- a/Loops/Break keyword/task.md	
+++ b/Loops/Break keyword/task.md	
@@ -5,7 +5,9 @@ always be `True`, such a loop becomes infinite. The most straightforward way to
 an infinite loop is to use `while True`. The `break` keyword is used to 
 escape the loop.  
 
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6302#break?utm_source=jba&utm_medium=jba_courses_links).
   
+### Task
 Write a condition to exit the loop on its third iteration after evaluating if `animal`
 is equal to `elephant`.  Use the `break` statement.  The `zoo` list in the end should contain 
 only `lion` and `tiger` (because you `pop` all the other ones in the loop).
diff --git a/Loops/Continue keyword/task.md b/Loops/Continue keyword/task.md
index 73626181..e7c37565 100644
--- a/Loops/Continue keyword/task.md	
+++ b/Loops/Continue keyword/task.md	
@@ -5,6 +5,9 @@ the current iteration only and proceed right to the next one. The loop returns t
 `while` statement and evaluates the condition again. If there is no next item, 
 the `else` clause is executed if it is present.
   
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6302#continue?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 Print only the odd numbers `1, 3, 5, 7, 9`.  
 
 <div class='hint'>Use the <code>%</code> operator to check if <code>x</code> is even.</div>
diff --git a/Loops/Else with loops 2/task.md b/Loops/Else with loops 2/task.md
index 2ad43a8f..c5f6688d 100644
--- a/Loops/Else with loops 2/task.md	
+++ b/Loops/Else with loops 2/task.md	
@@ -18,8 +18,7 @@ The `else` statement will only be executed if `n` is a prime number, i.e. the `i
 `for` loop. 
 
 ### Task
-
-Inside the [function](course://Functions/Definition) `contains_even_number()`, write a `for` loop that would iterate over a list `lst` and, if an even element is found,
+Inside the [function](course://Loops/Else with loops 2) `contains_even_number()`, write a `for` loop that would iterate over a list `lst` and, if an even element is found,
 print `f"List {lst} contains an even number."` and exit the loop, if no such element is found, print `f"List {lst} does not contain an even number."`. 
 
 <div class="hint">
diff --git a/Loops/Else with loops/task.md b/Loops/Else with loops/task.md
index 92bc04db..09f94580 100644
--- a/Loops/Else with loops/task.md	
+++ b/Loops/Else with loops/task.md	
@@ -34,6 +34,9 @@ Remember, an `else` after an `if` statement is skipped and NOT executed if the e
 `if` is `True`, while in the case of loops, an `else` clause is executed after the loop itself
 is completed (unless there was a `break` in there somewhere).
 
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6302?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 In the code editor, add two lines of code to the second loop to make sure the loop only prints
 numbers 1 and 2 and never prints the phrase `"for loop is done"`.
 
diff --git a/Loops/For loop/task.md b/Loops/For loop/task.md
index dc281971..62b8f2a2 100644
--- a/Loops/For loop/task.md	
+++ b/Loops/For loop/task.md	
@@ -8,6 +8,9 @@ for each item. When the items are exhausted, the loop terminates.
 
 You can read more about the `for` statement on <a href="https://docs.python.org/3/reference/compound_stmts.html#the-for-statement">this page</a> of Python Documentation.
   
+For more structured and detailed information, you can also refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6065?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 Print each prime number from the `primes` list using the `for` loop. A prime 
 number is a natural number greater than `1` that has no positive divisors 
 other than `1` and itself.  
diff --git a/Loops/List Comprehension/task.md b/Loops/List Comprehension/task.md
index 314983ac..1a6b202d 100644
--- a/Loops/List Comprehension/task.md	
+++ b/Loops/List Comprehension/task.md	
@@ -28,6 +28,9 @@ Output:
 ```
 List comprehensions are also more efficient computationally than a `for` loop.
 
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6315?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 In the code editor, use list comprehension to build `my_efficient_list` from the elements of `my_inefficient_list`
 by adding $10$ to each of them. For example, the first element of `my_inefficient_list` is $1 + 10 = 11$,
 so the first element of `my_efficient_list` should be $11 + 10 = 21$, and so on.
diff --git a/Loops/Loop over a string/task.md b/Loops/Loop over a string/task.md
index fdc8a8c6..810a18ba 100644
--- a/Loops/Loop over a string/task.md	
+++ b/Loops/Loop over a string/task.md	
@@ -3,6 +3,7 @@
 As we discussed earlier, strings in Python are in many ways similar to lists. 
 You can iterate over a string just like you would iterate over a list.  
   
+### Task
 Use a loop to count how many characters `hello_world` contains. Store 
 this number in the variable `length`.  
 
diff --git a/Loops/Nested List Comprehension/task.md b/Loops/Nested List Comprehension/task.md
index 8b764c4f..85942c38 100644
--- a/Loops/Nested List Comprehension/task.md	
+++ b/Loops/Nested List Comprehension/task.md	
@@ -33,6 +33,8 @@ Output:
 [[0, 2, 4, 6, 8], [0, 2, 4, 6, 8], [0, 2, 4, 6, 8]]
 ```
 
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6938#nested-list-comprehension?utm_source=jba&utm_medium=jba_courses_links).
+
 ### Task
 
 Create a $10×10$ `matrix` such that each row (sublist) contains **characters** 0–9 from
diff --git a/Loops/Nested for Loop/task.md b/Loops/Nested for Loop/task.md
index 925b81fb..e8232d00 100644
--- a/Loops/Nested for Loop/task.md	
+++ b/Loops/Nested for Loop/task.md	
@@ -29,7 +29,9 @@ Note that any type of loop can be nested inside another loop.
 For example, a [`while` loop](course://Loops/While loop) (see further) can be nested inside a `for` loop, or vice versa.
 </details>
 
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6065#nested-loop?utm_source=jba&utm_medium=jba_courses_links).
 
+### Task
 You are given a tic-tac-toe board of 3x3, your task is to print every position. Coordinates along each side
 are stored in the list `coordinates`. The output should be:
 ```text
diff --git a/Loops/While loop/task.md b/Loops/While loop/task.md
index 4079e150..7bdc41db 100644
--- a/Loops/While loop/task.md	
+++ b/Loops/While loop/task.md	
@@ -3,7 +3,10 @@
 A `while` loop is somewhat similar to an `if` statement: it executes some code if some 
 condition is `True`. The key difference is that it will continue to execute indented 
 code for as long as the condition is `True`.  If the expression is `False`, the loop terminates.
+
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/5940?utm_source=jba&utm_medium=jba_courses_links).
   
+### Task
 Print all squares from `1` to `9`  `(1, 4, ... , 81)`. Use the `number` variable in a
 `while` loop.  
 
diff --git a/Modules and packages/Built-in modules/task.md b/Modules and packages/Built-in modules/task.md
index 4e06edcc..92b699c7 100644
--- a/Modules and packages/Built-in modules/task.md	
+++ b/Modules and packages/Built-in modules/task.md	
@@ -20,9 +20,12 @@ secondary prompts if the interpreter is in the interactive mode:
 The variable `sys.path` is a list of strings that determines the interpreter’s search path 
 for modules: see what it prints for you when you run the code of the task.
 
-Remember that you can use &shortcut:CodeCompletion; after a dot (.) to explore available 
+Remember that you can use the &shortcut:CodeCompletion; shortcut after a dot (.) to explore available 
 methods of a module. You can read more about standard modules <a href="https://docs.python.org/3/tutorial/modules.html#standard-modules">here</a>.
-  
+
+For more structured and detailed information, you can also refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6019#built-in-modules?utm_source=jba&utm_medium=jba_courses_links).  
+
+### Task
 Print the current date and time using an imported built-in module `datetime`.  
 
 <div class='hint'>Use the <code>datetime.datetime.today()</code> function.</div>
diff --git a/Modules and packages/Executing modules as scripts/some_module.py b/Modules and packages/Executing modules as scripts/some_module.py
index 5e6c3977..ca3fbb70 100644
--- a/Modules and packages/Executing modules as scripts/some_module.py	
+++ b/Modules and packages/Executing modules as scripts/some_module.py	
@@ -4,7 +4,7 @@ def func():
 
 print(f'This is a message from {__name__}.')
 
-# Make a change here (add a main block!)
+# Make a change here (add a main block)
 if __name__ == "__main__":
     print('This should not be printed')
 
diff --git a/Modules and packages/Executing modules as scripts/task-info.yaml b/Modules and packages/Executing modules as scripts/task-info.yaml
index 5377b89a..407f7a4f 100644
--- a/Modules and packages/Executing modules as scripts/task-info.yaml	
+++ b/Modules and packages/Executing modules as scripts/task-info.yaml	
@@ -1,25 +1,24 @@
 type: edu
 files:
-- name: task.py
-  visible: true
-  placeholders:
-  - offset: 65
-    length: 18
-    placeholder_text: '# Call func() from the imported module'
-  - offset: 107
-    length: 100
-    placeholder_text: print('This should be printed ONLY when dict_keys.py is called
-      directly.')
-- name: tests/test_task.py
-  visible: false
-- name: __init__.py
-  visible: false
-- name: tests/__init__.py
-  visible: false
-- name: some_module.py
-  visible: true
-  placeholders:
-  - offset: 174
-    length: 66
-    placeholder_text: print('This should not be printed')
+  - name: task.py
+    visible: true
+    placeholders:
+      - offset: 65
+        length: 18
+        placeholder_text: '# Call func() from the imported module'
+      - offset: 125
+        length: 100
+        placeholder_text: print('This should be printed ONLY when task.py is called directly.')
+  - name: tests/test_task.py
+    visible: false
+  - name: __init__.py
+    visible: false
+  - name: tests/__init__.py
+    visible: false
+  - name: some_module.py
+    visible: true
+    placeholders:
+      - offset: 173
+        length: 66
+        placeholder_text: print('This should not be printed when this file is imported')
 feedback_link: https://docs.google.com/forms/d/e/1FAIpQLSfRlDlldKfuq-cHMNFfHMER61P1PRIan7KG6yp1GvaweDI7GA/viewform?usp=pp_url&entry.2103429047=Modules+and+Packages+/+Executing+modules+as+scripts
diff --git a/Modules and packages/Executing modules as scripts/task.md b/Modules and packages/Executing modules as scripts/task.md
index 0e2aa1ad..edf32d0e 100644
--- a/Modules and packages/Executing modules as scripts/task.md	
+++ b/Modules and packages/Executing modules as scripts/task.md	
@@ -56,6 +56,8 @@ some_module __name__ is: __main__
 some_module executed directly
 ```
 
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6057?utm_source=jba&utm_medium=jba_courses_links).
+
 ### Task
 <i>The files in this task are named the same as in the examples above, but their code is a bit different.</i>
 
diff --git a/Modules and packages/Executing modules as scripts/task.py b/Modules and packages/Executing modules as scripts/task.py
index fa43540d..18012c34 100644
--- a/Modules and packages/Executing modules as scripts/task.py	
+++ b/Modules and packages/Executing modules as scripts/task.py	
@@ -3,7 +3,7 @@
 print(f'This is a message from {__name__}.')
 some_module.func()
 
-# Make a change here.
+# Make a change here (add a main block)
 if __name__ == "__main__":
     print('This should be printed ONLY when task.py is called directly.')
 
diff --git a/Modules and packages/From import/task-info.yaml b/Modules and packages/From import/task-info.yaml
index 6f0ed1d0..21f14c53 100644
--- a/Modules and packages/From import/task-info.yaml	
+++ b/Modules and packages/From import/task-info.yaml	
@@ -1,9 +1,5 @@
 type: edu
 files:
-- name: my_module.py
-  visible: true
-- name: calculator.py
-  visible: true
 - name: from_import.py
   visible: true
   placeholders:
@@ -13,6 +9,10 @@ files:
   - offset: 97
     length: 12
     placeholder_text: '''Instantiate a calculator'''
+- name: my_module.py
+  visible: true
+- name: calculator.py
+  visible: true
 - name: tests/__init__.py
   visible: false
 - name: tests/test_task.py
diff --git a/Modules and packages/From import/task.md b/Modules and packages/From import/task.md
index 16da983c..de9c4643 100644
--- a/Modules and packages/From import/task.md	
+++ b/Modules and packages/From import/task.md	
@@ -37,6 +37,9 @@ when utilising `from` with similar effects:
 from calculator import Subtract as Minus
 ```
 
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6019#module-loading?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 Import the `Calculator` class from `calculator` and create an instance of this class. Remember how to access it correctly in 
 this case.
 
diff --git a/Modules and packages/Import module/task-info.yaml b/Modules and packages/Import module/task-info.yaml
deleted file mode 100644
index 9c4f57ff..00000000
--- a/Modules and packages/Import module/task-info.yaml	
+++ /dev/null
@@ -1,23 +0,0 @@
-type: edu
-files:
-- name: my_module.py
-  visible: true
-- name: imports.py
-  visible: true
-  placeholders:
-  - offset: 17
-    length: 17
-    placeholder_text: '# Import the module `calculator` here'
-  - offset: 124
-    length: 11
-    placeholder_text: '# Use Calculator method `add` to add `i` to the current value.'
-  - offset: 75
-    length: 23
-    placeholder_text: '''Create a new instance of Calculator class defined in calculator'''
-- name: calculator.py
-  visible: true
-- name: tests/__init__.py
-  visible: false
-- name: tests/test_task.py
-  visible: false
-feedback_link: https://docs.google.com/forms/d/e/1FAIpQLSfRlDlldKfuq-cHMNFfHMER61P1PRIan7KG6yp1GvaweDI7GA/viewform?usp=pp_url&entry.2103429047=Modules+and+Packages+/+Import+module
\ No newline at end of file
diff --git a/Modules and packages/Import_module/imports.py b/Modules and packages/Import_module/imports.py
new file mode 100644
index 00000000..d1d632bd
--- /dev/null
+++ b/Modules and packages/Import_module/imports.py	
@@ -0,0 +1,3 @@
+import my_funcs
+
+my_funcs.hello_world("John")
diff --git a/Modules and packages/Import module/my_module.py b/Modules and packages/Import_module/my_funcs.py
similarity index 100%
rename from Modules and packages/Import module/my_module.py
rename to Modules and packages/Import_module/my_funcs.py
diff --git a/Modules and packages/Import_module/task-info.yaml b/Modules and packages/Import_module/task-info.yaml
new file mode 100644
index 00000000..49a4c360
--- /dev/null
+++ b/Modules and packages/Import_module/task-info.yaml	
@@ -0,0 +1,16 @@
+type: edu
+custom_name: Import module
+files:
+  - name: imports.py
+    visible: true
+    placeholders:
+      - offset: 26
+        length: 19
+        placeholder_text: '# call the hello_world function from the my_funcs module'
+  - name: my_funcs.py
+    visible: true
+  - name: tests/__init__.py
+    visible: false
+  - name: tests/test_task.py
+    visible: false
+feedback_link: https://docs.google.com/forms/d/e/1FAIpQLSfRlDlldKfuq-cHMNFfHMER61P1PRIan7KG6yp1GvaweDI7GA/viewform?usp=pp_url&entry.2103429047=Modules+and+Packages+/+Import+module
diff --git a/Modules and packages/Import module/task-remote-info.yaml b/Modules and packages/Import_module/task-remote-info.yaml
similarity index 100%
rename from Modules and packages/Import module/task-remote-info.yaml
rename to Modules and packages/Import_module/task-remote-info.yaml
diff --git a/Modules and packages/Import module/task.md b/Modules and packages/Import_module/task.md
similarity index 65%
rename from Modules and packages/Import module/task.md
rename to Modules and packages/Import_module/task.md
index 6377d383..3f3de76f 100644
--- a/Modules and packages/Import module/task.md	
+++ b/Modules and packages/Import_module/task.md	
@@ -16,16 +16,13 @@ directly, but using the module name, you can now access the functions, for examp
 ```python
 my_funcs.func1()
 ```
-
-Modules can import other modules. It is customary but not required to place all 
-import statements at the beginning of a module.
-
-You can find out more about modules in Python by reading [this section](https://docs.python.org/3/tutorial/modules.html) of The Python Tutorial. 
   
-In the code editor, import the module `calculator` and create an instance of the class `Calculator` (`calc`). 
-Use the `add` method defined in `Calculator` in a loop to add up numbers from 0 to 99.
+For more structured and detailed information, you can also refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6019#module-loading?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
+In the code editor, you have already imported the module `my_funcs`. 
+Call the function `hello_world` from this module with the argument `"John"`.
 
-<div class='hint'>Use the <code>import</code> keyword and the <code>calculator</code> reference.</div>
 <div class='hint'>Access the function from the module using syntax such as <code>module.function()</code>.</div>
 <div class="hint">Don't forget to provide the function with an argument.</div>
 
diff --git a/Modules and packages/Import module/tests/__init__.py b/Modules and packages/Import_module/tests/__init__.py
similarity index 100%
rename from Modules and packages/Import module/tests/__init__.py
rename to Modules and packages/Import_module/tests/__init__.py
diff --git a/Modules and packages/Import_module/tests/test_task.py b/Modules and packages/Import_module/tests/test_task.py
new file mode 100644
index 00000000..0afa0e9a
--- /dev/null
+++ b/Modules and packages/Import_module/tests/test_task.py	
@@ -0,0 +1,20 @@
+import unittest
+import contextlib
+import io
+import re
+
+f = io.StringIO()
+try:
+    with contextlib.redirect_stdout(f):
+        from imports import *
+    output = f.getvalue().split('\n')
+
+    class TestCase(unittest.TestCase):
+        def test_out(self):
+            expected, actual = 'Hello, World! My name is John', output[0]
+            self.assertEqual(expected, actual, msg='Call hello_world with the "John" argument.')
+
+except AttributeError:
+    class TestFailCase(unittest.TestCase):
+        def test_fail(self):
+            self.assertTrue(False, msg='You need to use the hello_world function from the my_funcs module.')
diff --git a/Modules and packages/Import_module_part_two/__init__.py b/Modules and packages/Import_module_part_two/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/Modules and packages/Import module/calculator.py b/Modules and packages/Import_module_part_two/calculator.py
similarity index 100%
rename from Modules and packages/Import module/calculator.py
rename to Modules and packages/Import_module_part_two/calculator.py
diff --git a/Modules and packages/Import module/imports.py b/Modules and packages/Import_module_part_two/imports.py
similarity index 70%
rename from Modules and packages/Import module/imports.py
rename to Modules and packages/Import_module_part_two/imports.py
index 75864551..bbb371a8 100644
--- a/Modules and packages/Import module/imports.py	
+++ b/Modules and packages/Import_module_part_two/imports.py	
@@ -1,9 +1,5 @@
-import my_module
 import calculator
 
-my_module.hello_world("John")
-
-
 calc = calculator.Calculator()
 for i in range(100):
     calc.add(i)
diff --git a/Modules and packages/Import_module_part_two/task-info.yaml b/Modules and packages/Import_module_part_two/task-info.yaml
new file mode 100644
index 00000000..d4675263
--- /dev/null
+++ b/Modules and packages/Import_module_part_two/task-info.yaml	
@@ -0,0 +1,24 @@
+type: edu
+custom_name: Import module part 2
+files:
+  - name: imports.py
+    visible: true
+    placeholders:
+      - offset: 0
+        length: 17
+        placeholder_text: '# Import the `calculator` module here'
+      - offset: 26
+        length: 23
+        placeholder_text: '#Create a new instance of the `Calculator` class defined in the `calculator` module'
+      - offset: 75
+        length: 11
+        placeholder_text: '# Use the Calculator method `add` to add `i` to the current value.'
+  - name: calculator.py
+    visible: true
+  - name: tests/test_task.py
+    visible: false
+  - name: __init__.py
+    visible: false
+  - name: tests/__init__.py
+    visible: false
+feedback_link: https://docs.google.com/forms/d/e/1FAIpQLSfRlDlldKfuq-cHMNFfHMER61P1PRIan7KG6yp1GvaweDI7GA/viewform?usp=pp_url&entry.2103429047=Modules+and+Packages+/+Import+module+2
diff --git a/Modules and packages/Import_module_part_two/task-remote-info.yaml b/Modules and packages/Import_module_part_two/task-remote-info.yaml
new file mode 100644
index 00000000..de8a0b93
--- /dev/null
+++ b/Modules and packages/Import_module_part_two/task-remote-info.yaml	
@@ -0,0 +1 @@
+id: 1396640314
diff --git a/Modules and packages/Import_module_part_two/task.md b/Modules and packages/Import_module_part_two/task.md
new file mode 100644
index 00000000..19e9d121
--- /dev/null
+++ b/Modules and packages/Import_module_part_two/task.md	
@@ -0,0 +1,15 @@
+## Import module 2
+
+You can import not only functions but also classes and even other modules. It is customary, though not required, to place all 
+import statements at the beginning of a module.
+
+You can learn more about modules in Python by reading [this section](https://docs.python.org/3/tutorial/modules.html) of The Python Tutorial.
+
+### Task
+In the code editor, import the `calculator` module and create an instance of the `Calculator` class (`calc`). 
+Use the `add` method defined in `Calculator` in a loop to add up numbers from 0 to 99.
+
+<div class='hint'>Use the <code>import</code> keyword and the <code>calculator</code> reference.</div>
+<div class='hint'>Access the function from the module using syntax such as <code>module.function()</code>.</div>
+<div class="hint">Don't forget to provide the function with an argument.</div>
+
diff --git a/Modules and packages/Import_module_part_two/tests/__init__.py b/Modules and packages/Import_module_part_two/tests/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/Modules and packages/Import module/tests/test_task.py b/Modules and packages/Import_module_part_two/tests/test_task.py
similarity index 82%
rename from Modules and packages/Import module/tests/test_task.py
rename to Modules and packages/Import_module_part_two/tests/test_task.py
index 739b8bfa..ea719359 100644
--- a/Modules and packages/Import module/tests/test_task.py	
+++ b/Modules and packages/Import_module_part_two/tests/test_task.py	
@@ -19,9 +19,7 @@ def test_class(self):
                 self.assertTrue(False, msg='Do not change variable names.')
 
         def test_out(self):
-            expected, actual = 'Hello, World! My name is John', output[0]
-            self.assertEqual(expected, actual, msg='Please do not change the starter code.')
-            expected, actual = str(4950), output[1]
+            expected, actual = str(4950), output[0]
             self.assertEqual(expected, actual, msg='Calculation result looks wrong.')
 
 except NameError:
diff --git a/Modules and packages/Packages/task-info.yaml b/Modules and packages/Packages/task-info.yaml
index dd16498d..d7787888 100644
--- a/Modules and packages/Packages/task-info.yaml	
+++ b/Modules and packages/Packages/task-info.yaml	
@@ -1,30 +1,30 @@
 type: edu
 files:
-- name: packages.py
-  visible: true
-  placeholders:
-  - offset: 95
-    length: 46
-    placeholder_text: '# Import the `official` module here'
-  - offset: 197
-    length: 20
-    placeholder_text: '''Say goodbye to Alex'''
-- name: functions/greeting/hello.py
-  visible: true
-- name: functions/goodbye.py
-  visible: true
-- name: classes/calculator.py
-  visible: true
-- name: classes/__init__.py
-  visible: true
-- name: functions/__init__.py
-  visible: true
-- name: functions/greeting/__init__.py
-  visible: true
-- name: functions/greeting/official.py
-  visible: true
-- name: tests/__init__.py
-  visible: false
-- name: tests/test_task.py
-  visible: false
-feedback_link: https://docs.google.com/forms/d/e/1FAIpQLSfRlDlldKfuq-cHMNFfHMER61P1PRIan7KG6yp1GvaweDI7GA/viewform?usp=pp_url&entry.2103429047=Modules+and+Packages+/+Packages
\ No newline at end of file
+  - name: packages.py
+    visible: true
+    placeholders:
+      - offset: 95
+        length: 46
+        placeholder_text: '# Import the `official` module here'
+      - offset: 197
+        length: 20
+        placeholder_text: '''Say goodbye to Alex'''
+  - name: functions/greeting/hello.py
+    visible: true
+  - name: functions/goodbye.py
+    visible: true
+  - name: classes/calculator.py
+    visible: true
+  - name: classes/__init__.py
+    visible: true
+  - name: functions/__init__.py
+    visible: true
+  - name: functions/greeting/__init__.py
+    visible: true
+  - name: functions/greeting/official.py
+    visible: true
+  - name: tests/__init__.py
+    visible: false
+  - name: tests/test_task.py
+    visible: false
+feedback_link: https://docs.google.com/forms/d/e/1FAIpQLSfRlDlldKfuq-cHMNFfHMER61P1PRIan7KG6yp1GvaweDI7GA/viewform?usp=pp_url&entry.2103429047=Modules+and+Packages+/+Packages
diff --git a/Modules and packages/Packages/task.md b/Modules and packages/Packages/task.md
index 0aed5f3f..c4bcf4c5 100644
--- a/Modules and packages/Packages/task.md	
+++ b/Modules and packages/Packages/task.md	
@@ -40,6 +40,11 @@ hello.hello('Susan')
 
 You can learn more about packages by reading <a href="https://docs.python.org/3/tutorial/modules.html#packages">this page</a> of Python Documentation.
 
+For more structured and detailed information, you can also refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6384?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
+Look at the file structure in the `classes` and `functions` directories and their subdirectories.
+
 In the code editor, import the `official` module properly to make the last `print` 
 statement work.
 
diff --git a/Modules and packages/lesson-info.yaml b/Modules and packages/lesson-info.yaml
index b21e6bbc..5bdaa5f5 100644
--- a/Modules and packages/lesson-info.yaml	
+++ b/Modules and packages/lesson-info.yaml	
@@ -1,6 +1,7 @@
 content:
-- Import module
-- Built-in modules
-- From import
-- Packages
-- Executing modules as scripts
+  - Import_module
+  - Import_module_part_two
+  - Built-in modules
+  - From import
+  - Packages
+  - Executing modules as scripts
diff --git a/README.md b/README.md
index 6e882013..c73c059f 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,6 @@
 # Introduction to Python course  (JetBrains Academy version) [![official JetBrains project](http://jb.gg/badges/official.svg)](https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub)
-<p>This is an introductory Python course by JetBrains Academy.
-  The target audience are the people with little or no experience in programming who
-  would like to start learning Python.</p>
+  <p>This is an introductory Python course by JetBrains Academy. Python is a leading language for data analysis, AI, ML, automation, and more. The course is designed for individuals with little to no programming experience who want to start learning Python.</p>
+
 
   <p>In this course, you will learn about the basics, such as variables and operations
   with them, strings and other data structures, boolean operators, conditions, control
@@ -10,5 +9,8 @@
 
   <p>Have fun and good luck!</p>
 
-  <p>P.S. Want to contribute? Feel free to send a pull request to this course’s
-  <a href=”https://github.com/jetbrains-academy/introduction_to_python”>git repo</a>.</p>
+## Want to know more?
+If you have questions about the course or the tasks, or if you find any errors, feel free to ask questions and participate in discussions within the repository [issues](https://github.com/jetbrains-academy/introduction_to_python/issues).
+
+## Contribution
+Please be sure to review the [project's contributing guidelines](./contributing.md) to learn how to help the project.
diff --git a/Strings/Basic string methods/task.md b/Strings/Basic string methods/task.md
index 47886b8b..5d4cf1c0 100644
--- a/Strings/Basic string methods/task.md	
+++ b/Strings/Basic string methods/task.md	
@@ -6,7 +6,10 @@ uppercase. To call any string method, type a dot after the string (or a variable
 the string) and the method name after it, e.g., `"John".upper()`. In PyCharm, you can 
 explore all available string methods by using the &shortcut:CodeCompletion; shortcut after the dot. 
 Detailed information about all string methods can be found <a href="https://docs.python.org/3/library/stdtypes.html#string-methods">here</a>.
-  
+
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6842?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 Print `monty_python` in upper case using an appropriate string method.  
 
 <div class='hint'>Pay attention to how the <code>lower()</code> method is used in our code.</div>
diff --git a/Strings/Character escaping/character_escaping.py b/Strings/Character escaping/character_escaping.py
index ad195bec..e3574111 100644
--- a/Strings/Character escaping/character_escaping.py	
+++ b/Strings/Character escaping/character_escaping.py	
@@ -1,4 +1,6 @@
-dont_worry = "Don't worry about apostrophes"
-# print(dont_worry)
-# print("\"Sweet\" is an ice-cream")
+dont_worry = "Don't worry about single quotes if the string is in double quotes, and vice versa"
+print(dont_worry)
+
+print("\"Sweet\" is an ice-cream")
+
 print('The name of this ice cream is "Sweet\'n\'Tasty"')
diff --git a/Strings/Character escaping/task-info.yaml b/Strings/Character escaping/task-info.yaml
index fceca316..9fb42f32 100644
--- a/Strings/Character escaping/task-info.yaml	
+++ b/Strings/Character escaping/task-info.yaml	
@@ -1,13 +1,13 @@
 type: edu
 files:
-- name: character_escaping.py
-  visible: true
-  placeholders:
-  - offset: 109
-    length: 47
-    placeholder_text: ???
-- name: tests/__init__.py
-  visible: false
-- name: tests/test_task.py
-  visible: false
-feedback_link: https://docs.google.com/forms/d/e/1FAIpQLSfRlDlldKfuq-cHMNFfHMER61P1PRIan7KG6yp1GvaweDI7GA/viewform?usp=pp_url&entry.2103429047=Strings+/+Character+Escaping
\ No newline at end of file
+  - name: character_escaping.py
+    visible: true
+    placeholders:
+      - offset: 159
+        length: 47
+        placeholder_text: ???
+  - name: tests/__init__.py
+    visible: false
+  - name: tests/test_task.py
+    visible: false
+feedback_link: https://docs.google.com/forms/d/e/1FAIpQLSfRlDlldKfuq-cHMNFfHMER61P1PRIan7KG6yp1GvaweDI7GA/viewform?usp=pp_url&entry.2103429047=Strings+/+Character+Escaping
diff --git a/Strings/Character escaping/task.md b/Strings/Character escaping/task.md
index e35bb0be..bb158cd4 100644
--- a/Strings/Character escaping/task.md	
+++ b/Strings/Character escaping/task.md	
@@ -16,12 +16,14 @@ If you need to print quotes inside a string, use a different kind of quotes: sin
 marks may be used in a double-quoted string without escaping, and vice versa. Also, as a side note, it is a good 
 idea to pick your favorite kind of quotes and use them consistently.
 
-You can learn more about escaping from <a href="https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals">this section</a> of Python Documentation.  
+You can learn more about escaping from <a href="https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals">this section</a> of Python Documentation.
 
+For more structured and detailed information, you can also refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/7130?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 Print out the following text using one string:  
 ```text
 The name of this ice cream is "Sweet'n'Tasty"  
 ```
 
-
 <div class='hint'>Use the backslash to escape quotes.</div>
diff --git a/Strings/Character escaping/tests/test_task.py b/Strings/Character escaping/tests/test_task.py
index 9b73ba80..7d834a26 100644
--- a/Strings/Character escaping/tests/test_task.py	
+++ b/Strings/Character escaping/tests/test_task.py	
@@ -8,7 +8,7 @@ def test_string(self):
         f = io.StringIO()
         with contextlib.redirect_stdout(f):
             import character_escaping
-        output = f.getvalue()[:-1]
+        output = f.getvalue().split('\n')[-2]
         string = 'The name of this ice cream is "Sweet\'n\'Tasty"'
         self.assertEqual(string, output, msg='Wrong result string.')
 
diff --git a/Strings/F-strings/task.md b/Strings/F-strings/task.md
index 7f49b1d9..e4863f09 100644
--- a/Strings/F-strings/task.md
+++ b/Strings/F-strings/task.md
@@ -29,6 +29,9 @@ f"{name.lower()} is funny."
 ```
 For more information about formatted string literals you can refer to <a href="https://docs.python.org/3/reference/lexical_analysis.html#formatted-string-literals">Python Docs</a>.
 
+For more structured and detailed information, you can also refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6037?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 Try creating an f-string yourself. Also try running the code to see what it prints.
 
 <div class="hint">The value assigned to the <code>name</code> variable has to be a string, so it needs to be in quotes, 
diff --git a/Strings/In operator/task.md b/Strings/In operator/task.md
index 980135dd..6887b3ff 100644
--- a/Strings/In operator/task.md	
+++ b/Strings/In operator/task.md	
@@ -3,6 +3,7 @@
 If you want to check whether a string contains a specific letter or a substring, 
 you can use the `in` keyword.  
   
+### Task
 Check if there is `"ice"` in `"ice cream"` and assign the result to the variable `contains`.  
 
 <div class="hint">Use the <code>in</code> operator.</div>
diff --git a/Strings/String formatting/task.md b/Strings/String formatting/task.md
index b16015ba..f4fefa66 100644
--- a/Strings/String formatting/task.md	
+++ b/Strings/String formatting/task.md	
@@ -12,7 +12,10 @@ or decimal values.
 > interface, or <a href="https://docs.python.org/3/library/string.html#template-strings">template strings</a> may help avoid these errors. 
 > Each of these alternatives provides their own trade-offs and benefits of 
 > simplicity, flexibility, and/or extensibility.</i>
-  
+
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6037?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 Tell PyCharm how old you are (using digits).  
 
 <div class='hint'>Use the <code>%d</code> special symbol.</div>
diff --git a/Strings/String indexing/task.md b/Strings/String indexing/task.md
index 95a79dcb..27b60c70 100644
--- a/Strings/String indexing/task.md	
+++ b/Strings/String indexing/task.md	
@@ -8,7 +8,10 @@ when `x` is not found in the string.
 Indices may also be negative numbers if you need to start counting from the right 
 (i.e., from the end of your string). 
 Note that since `-0` is the same as `0` , negative indices start from `-1`.  
-  
+
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6189?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 Use the index operator to get the letter `"P"` from `"Python"` .  
 
 <div class="hint">Note that indices start with 0.</div>
diff --git a/Strings/String length/task-info.yaml b/Strings/String length/task-info.yaml
index 73fb3fef..4d477b7d 100644
--- a/Strings/String length/task-info.yaml	
+++ b/Strings/String length/task-info.yaml	
@@ -5,10 +5,10 @@ files:
   placeholders:
   - offset: 200
     length: 23
-    placeholder_text: '"???"'
+    placeholder_text: ???
   - offset: 121
     length: 20
-    placeholder_text: '"???"'
+    placeholder_text: ???
 - name: tests/__init__.py
   visible: false
 - name: tests/test_task.py
diff --git a/Strings/String length/task.md b/Strings/String length/task.md
index c5f3dc62..87696f3d 100644
--- a/Strings/String length/task.md	
+++ b/Strings/String length/task.md	
@@ -1,7 +1,23 @@
 ## String length
 
-The `len()` method is used to count how many characters a string contains.  
-  
+The `len()` method is used to count how many characters a string contains.
+
+For example:
+```python
+s = "Hello World"
+print(len(s))   # will print 11
+```
+
+Note that the result of the `/` division operation is of type float:
+```python
+a = 10/2
+print(a)        # 5.0
+print(type(a))  # <class 'float'>
+```
+
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/5814?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 Get the first half of the string stored in the variable `phrase`.  
 Note: when getting the index, remember about type conversion.  
 
diff --git a/Strings/String length/tests/test_task.py b/Strings/String length/tests/test_task.py
index 9c710713..dd67cb6a 100644
--- a/Strings/String length/tests/test_task.py	
+++ b/Strings/String length/tests/test_task.py	
@@ -18,3 +18,8 @@ def test_index(self):
     class TestCase(unittest.TestCase):
         def test_fail(self):
             self.assertTrue(False, msg="Do not rename any variables.")
+
+except TypeError:
+    class TestCase(unittest.TestCase):
+        def test_fail(self):
+            self.assertTrue(False, msg="Don't forget to convert the result of division to int type")
\ No newline at end of file
diff --git a/Strings/String negative indexing/task.md b/Strings/String negative indexing/task.md
index 3b4db960..3f196af1 100644
--- a/Strings/String negative indexing/task.md	
+++ b/Strings/String negative indexing/task.md	
@@ -2,7 +2,10 @@
 
 As we said, you can use negative indices to count characters ‘backwards’ starting
 from the end of a string.  
-  
+
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6189?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 Use a negative index to get the `'!'` sign from `long_string`.   
 
 <div class='hint'>Use a negative index.</div>
diff --git a/Strings/String slicing/task.md b/Strings/String slicing/task.md
index e4b2be86..d92cb910 100644
--- a/Strings/String slicing/task.md	
+++ b/Strings/String slicing/task.md	
@@ -24,6 +24,9 @@ str[:end]      # items from the beginning through end-1
 str[:]         # a copy of the whole array
 </code></pre>
 
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6177?utm_source=jba&utm_medium=jba_courses_links).
+
+### Task
 Use slicing to get `"Python"` from the `monty_python` variable.  
 
 <div class='hint'>You can leave one of the indices empty.</div>
diff --git a/Variables/Arithmetic operators/arithmetic_operators.py b/Variables/Arithmetic operators/arithmetic_operators.py
index 4fd1ad60..01005ead 100644
--- a/Variables/Arithmetic operators/arithmetic_operators.py	
+++ b/Variables/Arithmetic operators/arithmetic_operators.py	
@@ -1,16 +1,16 @@
-number = 9.0        # Float number
+init_number = 9.0        # Float number
 
-division_result = number / 2
+division_result = init_number / 2
 
-division_remainder = number % 2
+division_remainder = init_number % 2
 
 multiplication_result = division_result * 2
 
 addition_result = multiplication_result + division_remainder
 
-subtraction_result = number - multiplication_result
+subtraction_result = init_number - multiplication_result
 
-floor_result = number // 2
+floor_result = init_number // 2
 
 power_result = multiplication_result ** 3
 
diff --git a/Variables/Arithmetic operators/task-info.yaml b/Variables/Arithmetic operators/task-info.yaml
index 866f7cd9..bf1ca627 100644
--- a/Variables/Arithmetic operators/task-info.yaml	
+++ b/Variables/Arithmetic operators/task-info.yaml	
@@ -1,29 +1,29 @@
 type: edu
 files:
-- name: arithmetic_operators.py
-  visible: true
-  placeholders:
-  - offset: 54
-    length: 10
-    placeholder_text: '# divide the number by two'
-  - offset: 87
-    length: 10
-    placeholder_text: '# get the remainder of the division of the number by two'
-  - offset: 123
-    length: 19
-    placeholder_text: '# multiply the division result by 2'
-  - offset: 162
-    length: 42
-    placeholder_text: '# add the division remainder to the multiplication result'
-  - offset: 227
-    length: 30
-    placeholder_text: '# subtract the multiplication result from the initial number'
-  - offset: 274
-    length: 11
-    placeholder_text: '# perform a floor division of number by 2'
-  - offset: 302
-    length: 26
-    placeholder_text: '# raise the multiplication result to the power of 3'
-- name: tests/test_task.py
-  visible: false
-feedback_link: https://docs.google.com/forms/d/e/1FAIpQLSfRlDlldKfuq-cHMNFfHMER61P1PRIan7KG6yp1GvaweDI7GA/viewform?usp=pp_url&entry.2103429047=Variables+/+Arithmetic+Operators
\ No newline at end of file
+  - name: arithmetic_operators.py
+    visible: true
+    placeholders:
+      - offset: 59
+        length: 15
+        placeholder_text: '# divide the init_number by 2'
+      - offset: 97
+        length: 15
+        placeholder_text: '# get the remainder of the division of the init_number by 2'
+      - offset: 138
+        length: 19
+        placeholder_text: '# multiply the division_result by 2'
+      - offset: 177
+        length: 42
+        placeholder_text: '# add the division_remainder to the multiplication_result'
+      - offset: 242
+        length: 35
+        placeholder_text: '# subtract the multiplication_result from the init_number'
+      - offset: 294
+        length: 16
+        placeholder_text: '# perform a floor division of init_number by 2'
+      - offset: 327
+        length: 26
+        placeholder_text: '# raise the multiplication_result to the power of 3'
+  - name: tests/test_task.py
+    visible: false
+feedback_link: https://docs.google.com/forms/d/e/1FAIpQLSfRlDlldKfuq-cHMNFfHMER61P1PRIan7KG6yp1GvaweDI7GA/viewform?usp=pp_url&entry.2103429047=Variables+/+Arithmetic+Operators
diff --git a/Variables/Arithmetic operators/task.md b/Variables/Arithmetic operators/task.md
index 1375baf2..94a5f1aa 100644
--- a/Variables/Arithmetic operators/task.md	
+++ b/Variables/Arithmetic operators/task.md	
@@ -17,17 +17,29 @@ either both be numbers, or one argument must be an integer and the other – a s
   
 - The `-` (subtraction) operator yields the difference of its arguments.
 
+For example
+```python
+a = 16
+b = 3
+result = a // b  # result will be 5
+result = a % b   # result will be 1
+result = a ** 2  # result will be 256 (16 in power of 2)
+```
+
 The binary arithmetic operations have the conventional priority levels. Note that 
 some of these operations also apply to certain non-numeric types.
 
 You can read more on this topic <a href="https://docs.python.org/3/reference/expressions.html#binary-arithmetic-operations">here</a>.
+
+For more structured and detailed information, you can also refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/5865?utm_source=jba&utm_medium=jba_courses_links).
+
 ### Task
- - Divide the value stored in `number` by `2`.
+ - Divide the value stored in `init_number` by `2`.
  - Calculate a remainder of such a division.
- - Multiply the division result by `2`.
- - Add the division remainder to the multiplication result.
- - Subtract the multiplication result from the number.
- - Perform a floor division of `number` by 2.
+ - Multiply the `division_result` by `2`.
+ - Add the `division_remainder` to the `multiplication_result`.
+ - Subtract the `multiplication_result` from the `init_number`.
+ - Perform a floor division of `init_number` by 2.
  - Raise the `multiplication_result` to the power of 3
 
 <div class='hint'>First, use the <code>/</code> operator.</div>
@@ -38,3 +50,7 @@ You can read more on this topic <a href="https://docs.python.org/3/reference/exp
 <div class='hint'>Then use the <code>+</code> operator.</div>
 
 <div class='hint'>Then use the <code>-</code> operator.</div>
+
+<div class='hint'>Then use the <code>//</code> operator.</div>
+
+<div class='hint'>Then use the <code>**</code> operator.</div>
diff --git a/Variables/Assignments/task.md b/Variables/Assignments/task.md
index 28ffeeef..e257d4bb 100644
--- a/Variables/Assignments/task.md
+++ b/Variables/Assignments/task.md
@@ -5,6 +5,7 @@ assignment statement, such as `+=`, `-=`, etc.
 
 An augmented assignment expression like `x += 1` can be rewritten as `x = x + 1` to achieve a similar effect.
 You can read more about this <a href="https://docs.python.org/3/reference/simple_stmts.html#augmented-assignment-statements">here</a>.
+
 ### Task
 Use an augmented assignment to add `5` to `number` and update the variable.  
 
diff --git a/Variables/Boolean operators/task.md b/Variables/Boolean operators/task.md
index da4ddaa6..bfb6d587 100644
--- a/Variables/Boolean operators/task.md	
+++ b/Variables/Boolean operators/task.md	
@@ -3,6 +3,8 @@
 Boolean is a type of value that can only be `True` or `False`. The `==` (equality) operator 
 compares two variables and checks whether they are equal. You will learn more about boolean operators in a later [task](course://Condition expressions/Boolean operators). 
 
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6025?utm_source=jba&utm_medium=jba_courses_links).
+
 ### Task
  - Check whether the variable `two` is equal to `three`.
  - Check if the variable `is_equal` has a deceiving name.
diff --git a/Variables/Comparison operators/task.md b/Variables/Comparison operators/task.md
index a5fdaa13..78efc8d9 100644
--- a/Variables/Comparison operators/task.md	
+++ b/Variables/Comparison operators/task.md	
@@ -22,6 +22,9 @@ that of any arithmetic, shifting or bitwise operation. Comparisons yield boolean
 values: either `True` or `False`. Comparisons can be chained arbitrarily, and 
 expressions like `a < b < c` have the 
 conventional mathematical meaning. Read more on comparisons <a href="https://docs.python.org/3/reference/expressions.html#comparisons">here</a>.
+
+For more structured and detailed information, you can also refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/5920?utm_source=jba&utm_medium=jba_courses_links).
+
 ### Task
  - Check whether the value of the variable `three` is strictly greater than the value of 
 the variable `two`.
diff --git a/Variables/Type conversion/task.md b/Variables/Type conversion/task.md
index 3a7f74e0..07144371 100644
--- a/Variables/Type conversion/task.md	
+++ b/Variables/Type conversion/task.md	
@@ -3,7 +3,10 @@
 There are several built-in functions that let you convert one data type into another. 
 These functions return a new object representing the converted value. `int(x)` 
 converts `x` into an integer. `float(x)` converts `x` into a floating-point number. `str(x)` 
-converts object `x` into a string representation.  
+converts object `x` into a string representation.
+
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/6224?utm_source=jba&utm_medium=jba_courses_links).
+
 ### Task
 Convert `float_number` into an integer.  
 
diff --git a/Variables/Undefined variable/task.md b/Variables/Undefined variable/task.md
index 2c721735..228b7279 100644
--- a/Variables/Undefined variable/task.md	
+++ b/Variables/Undefined variable/task.md	
@@ -3,11 +3,11 @@
 Variable names may only contain Latin letters, digits, and/or the underscore 
 character, and they cannot start with a digit. They also cannot be any of the 
 reserved <a href="https://docs.python.org/3/reference/lexical_analysis.html#keywords">keywords</a>.
+
 ### Task
-Check what happens if you use a variable which is not defined yet. Change and run the code in the editor – try to print out an undefined name.  
+Check what happens if you use a variable that is not yet defined. Modify and run the code in the editor – try to print out an **undefined** name (i.e. type the name of an undefined variable inside the brackets of the `print` statement).  
 This should cause an exception - a `NameError`.
 
-Note, that "check" command only runs the testing system, and you will not see the output, so you need to run the file.
+Note, that the "check" command only runs the testing system, and you won't see the output, so you need to run the file.
 
-<div class="hint">Type the name of an undefined variable inside the brackets of the <code>print</code> statement. 
-Note that variable names must start with a letter and can contain only letters, '_', and numbers.</div>
+<div class="hint">For example, try to print the <code>var1</code> variable instead of <code>variable</code></div>
diff --git a/Variables/Variable definition/task-info.yaml b/Variables/Variable definition/task-info.yaml
index 188b3a0b..6038111f 100644
--- a/Variables/Variable definition/task-info.yaml	
+++ b/Variables/Variable definition/task-info.yaml	
@@ -1,17 +1,17 @@
 type: edu
 files:
-- name: variable_definition.py
-  visible: true
-  placeholders:
-  - offset: 231
-    length: 1
-    placeholder_text: ???
-  - offset: 337
-    length: 1
-    placeholder_text: '# Assign a new value'
-  - offset: 472
-    length: 5
-    placeholder_text: '# Assign 2 to both a and b here'
-- name: tests/test_task.py
-  visible: false
+  - name: variable_definition.py
+    visible: true
+    placeholders:
+      - offset: 227
+        length: 1
+        placeholder_text: ???
+      - offset: 324
+        length: 10
+        placeholder_text: '# Assign a new value'
+      - offset: 444
+        length: 5
+        placeholder_text: '# Assign 2 to both a and b here'
+  - name: tests/test_task.py
+    visible: false
 feedback_link: https://docs.google.com/forms/d/e/1FAIpQLSfRlDlldKfuq-cHMNFfHMER61P1PRIan7KG6yp1GvaweDI7GA/viewform?usp=pp_url&entry.2103429047=Variables+/+Variable+Definition
diff --git a/Variables/Variable definition/task.md b/Variables/Variable definition/task.md
index 2b98e8dd..5b7216d4 100644
--- a/Variables/Variable definition/task.md	
+++ b/Variables/Variable definition/task.md	
@@ -3,9 +3,13 @@
 Variables are used to store values so we can refer to them later. A variable 
 is like a label, and in Python we use the ' `=` ' symbol, known as the 
 assignment operator, to assign a value to a variable. An assignment can be 
-chained, e.g., `a = b = 2`.   
+chained, e.g., `a = b = 2`.  
+
+For more structured and detailed information, you can refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/5859?utm_source=jba&utm_medium=jba_courses_links).
+
 ### Task
- - Change the value stored in the variable `greetings`.
- - Use the chain assignment to store 2 in both `a` and `b` on line 15.
+ 1. Assign the `World` string to the `name` variable.
+ 2. On line 10, replace the value in the `name` variable with your actual name.
+ 3. Use chain assignment to store the value 2 in both `a` and `b` on line 15.
 
-<div class="hint">Type a new value in the answer placeholder.</div>
+<div class="hint">Type a new "name" variable value in the answer placeholder.</div>
diff --git a/Variables/Variable definition/tests/test_task.py b/Variables/Variable definition/tests/test_task.py
index 23dfc27b..82d6ced2 100644
--- a/Variables/Variable definition/tests/test_task.py	
+++ b/Variables/Variable definition/tests/test_task.py	
@@ -27,16 +27,7 @@ def setUp(self):
                       "errors and warnings.".format(str(e)))
 
     def test_assignment_operator(self):
-        expected_first_greetings = "greetings = greetings"
-        actual_output = self.actualOutput.getvalue()
-
-        self.assertIn(expected_first_greetings, actual_output, msg="The line expressing greetings after the initial "
-                                                                   "assignment was not found. Check that the variable is "
-                                                                   "assigned properly and that the print statement "
-                                                                   "is intact.")
-
-    def test_assignment_operator2(self):
-        expected_first_greetings = "greetings = greetings"
+        expected_first_greetings = "Hello, World"
         actual_output = self.actualOutput.getvalue()
 
         self.assertIn(expected_first_greetings, actual_output, msg="The line expressing greetings after the initial "
@@ -45,16 +36,16 @@ def test_assignment_operator2(self):
                                                                    "is intact.")
 
     def test_variable(self):
-        unexpected_greetings = "greetings"
+        unexpected_name = "World"
 
         try:
-            actual_greetings = try_import().greetings
+            actual_name = try_import().name
         except AttributeError:
-            self.fail(msg="The variable greetings seems to be undefined. Do not remove it from the task code.")
+            self.fail(msg="The variable name seems to be undefined. Do not remove it from the task code.")
 
-        self.assertNotEqual(unexpected_greetings, actual_greetings, msg="The variable greetings doesn't seem to be "
-                                                                        "reassigned. You should change it to something "
-                                                                        "else.")
+        self.assertNotEqual(unexpected_name, actual_name, msg="The variable name doesn't seem to be "
+                                                              "reassigned. You should change it to something "
+                                                              "else.")
 
     def test_chained_assignment(self):
         expected_a = expected_b = 2
diff --git a/Variables/Variable definition/variable_definition.py b/Variables/Variable definition/variable_definition.py
index b944155f..5dd007fe 100644
--- a/Variables/Variable definition/variable_definition.py	
+++ b/Variables/Variable definition/variable_definition.py	
@@ -3,15 +3,15 @@
 # For now: it is used to convert the variable "a" into a string.
 print("a = " + str(a))
 
-# Assign "greetings" to the variable using the assignment operator
-greetings = "greetings"
-print("greetings = " + str(greetings))
-# Reassign anything to the variable here
-greetings = 5
-print("greetings = " + str(greetings))
+# Assign "World" to the name variable using the assignment operator
+name = "World"
+print("Hello, " + str(name))
+# Reassign the name variable with your actual name
+name = "Username"
+print("Hello, " + str(name))
 
 
-# This is called a "chained assignment". It assigns the value 2 to variables "a" and "b".
+# Use chain assignment here to assign the value 2 to variables "a" and "b".
 a = b = 2
 print("a = " + str(a))
 print("b = " + str(b))
diff --git a/Variables/Variable types/task.md b/Variables/Variable types/task.md
index 9216c063..fc5b7de2 100644
--- a/Variables/Variable types/task.md	
+++ b/Variables/Variable types/task.md	
@@ -21,6 +21,8 @@ and an `int` is a number without a decimal point.
 For more information on this topic, refer to the "<a href="https://docs.python.org/3/reference/datamodel.html#objects-values-and-types">Objects, values and types</a>"
 and "<a href="https://docs.python.org/3/reference/datamodel.html#the-standard-type-hierarchy">The standard type hierarchy</a>" sections in Python Documentation.
 
+For more structured and detailed information, you can also refer to [this Hyperskill knowledge base page](https://hyperskill.org/learn/step/5852?utm_source=jba&utm_medium=jba_courses_links).
+
 ### Task
 Print the type of the variable `float_number`.  
 
diff --git a/contributing.md b/contributing.md
new file mode 100644
index 00000000..23fbcf66
--- /dev/null
+++ b/contributing.md
@@ -0,0 +1,35 @@
+# What this repository is
+This repository contains the source material for the Introduction to Python course.
+
+# Contributing
+We love contributions!
+We welcome fixes for existing bugs, as well as corrections for task and test mistakes.
+The current tasks can be found in the [open issues](https://github.com/jetbrains-academy/introduction_to_python/issues) section of the project.
+If you have any questions, or discover bugs or mistakes, please do not hesitate to open new issues.
+
+Please add a comment to the issue if you're starting work on it.
+
+If you add some common functionality, such as for the test system, it is important to include comments that describe the new behavior.
+This will assist other developers and users in utilizing them correctly.
+
+## Submitting patches
+The best way to submit a patch is to [fork the project on GitHub](https://help.github.com/articles/fork-a-repo/)
+and then send us a [pull request](https://help.github.com/articles/creating-a-pull-request/)
+to the `master` branch via [GitHub Pull requests](https://github.com/jetbrains-academy/introduction_to_python/pulls).
+
+If you create your own fork, it might be helpful to enable rebase by default when you pull. You can do this by executing:
+``` bash
+git config --global pull.rebase true
+```
+This will prevent your local repository from having too many merge commits, helping to keep your pull request simple and easy to apply.
+
+## Checklist
+Before submitting the pull request, make sure that you can say "YES" to each point in this short checklist:
+
+-[ ] You provided the link to the related issue(s) from the repository;
+-[ ] You made a reasonable amount of changes related only to the provided issues;
+-[ ] You can explain the changes made in the pull request;
+-[ ] You ran the build locally and verified new functionality/fixed bugs;
+-[ ] You ran related tests locally (or added new ones) and they passed;
+-[ ] You do not have merge conflicts in the pull request.
+-[ ] You've made sure that all tests in [GitHub Actions](https://github.com/jetbrains-academy/introduction_to_python/tree/master/.github/workflows) pass
\ No newline at end of file
diff --git a/course-info.yaml b/course-info.yaml
index f38497ea..c9fdb8cc 100644
--- a/course-info.yaml
+++ b/course-info.yaml
@@ -2,7 +2,7 @@ type: marketplace
 title: Introduction to Python
 language: English
 summary: |-
-  <p>This is an introductory Python course by JetBrains Academy. The presented materials are based on the official <a href="https://docs.python.org/3/">Python Documentation</a>. The target audience are the people with little or no experience in programming who would like to start learning Python.</p>
+  <p>This is an introductory Python course by JetBrains Academy. Python is a leading language for data analysis, AI, ML, automation, and more. The presented materials are based on the official <a href="https://docs.python.org/3/">Python Documentation</a>. It is designed for individuals with little to no programming experience who want to start learning Python.</p>
   <p>In this course, you will learn about the basics, such as variables and operations with them, strings and other data structures, boolean operators, conditions, control flow, and so on. You will try implementing loops, functions, and classes, as well as using parts of your code as imported modules, and working with text files.</p>
   <p>Have fun and good luck!</p>
   <p>P.S. Want to contribute? Feel free to send a pull request to this course’s <a href="https://github.com/jetbrains-academy/introduction_to_python">git repo</a>.</p>
@@ -13,15 +13,15 @@ vendor:
 programming_language: Python
 environment: unittest
 content:
-- Introduction
-- Variables
-- Strings
-- Data structures
-- Condition expressions
-- Loops
-- Functions
-- Classes and objects
-- Modules and packages
-- File input output
+  - Introduction
+  - Variables
+  - Strings
+  - Data structures
+  - Condition expressions
+  - Loops
+  - Functions
+  - Classes and objects
+  - Modules and packages
+  - File input output
 tags:
-- Beginner-friendly
+  - Beginner-friendly
diff --git a/course-remote-info.yaml b/course-remote-info.yaml
index d50d88b5..34ea659c 100644
--- a/course-remote-info.yaml
+++ b/course-remote-info.yaml
@@ -1,4 +1,4 @@
 id: 16630
 update_date: "Mon, 25 Oct 2021 07:56:01 UTC"
-course_version: 24
+course_version: 29
 generated_edu_id: Introduction to Python_JetBrains_Python